我有一个包含以下内容的列表:
VIP NAME DATE ARRIVE_TIME FLIGHT_TIME
1 USER1 11-02 20.00 21.00
3 USER2 11-02 20.45 21.45
4 USER2 11-03 20.00 21.30
2 USER1 11-04 17.20 19.10
我想用shell脚本对这个和类似的列表进行排序。结果应该是一个新列表,其中的行不会发生冲突。 VIP 1是最重要的,如果任何号码较大的VIP在{1}} ARRIVE_TIME
之前{1}}的VIP 1应在同一天删除此行,那么FLIGHT_TIME
号码应该用于决定VIP
,ARRIVE_TIME
和FLIGHT_TIME
发生冲突时要保留哪些行。同样,VIP 2比VIP 3更重要,依此类推。
这是非常先进的,对于如何解决这个问题的想法我完全是空的。
答案 0 :(得分:2)
答案 1 :(得分:1)
这可能会让你开始:
head
删除它,或在for
循环中跳过它。while read line; do ...; done <tempfile
循环一次读取一行。<
比较调整为<=
。这是脚本:
#!/bin/bash
saveIFS="$IFS"
IFS=$'\n'
flights=($(sort -k3,3 -k4,4n -k5,5n -k1,1n flights ))
IFS="$saveIFS"
date=fields[2]
arrive=fields[3]
depart=fields[4]
for line in "${flights[@]}"
do
fields=($line)
if [[ ${!date} == $prevdate && ${!arrive} < $prevdep ]]
then
echo "deleted: $line" # or you could do something else here
else
echo $line
prevdep=${!depart}
prevdate=${!date}
fi
done