这可能会让你开始:
-
我忽略了标题行。你可以用
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