答案1
有时有很好的通用解决方案,有时,当一周中有 7 个固定的日子时,对其进行硬编码是很容易且显而易见的。
给定一个输入文件(来自链接的问题):
Name On-Call Phone
Carol MONDAY 248.344.5576
Bob TUESDAY 313.123.4567
Alice WEDNESDAY 616.556.4458
Dave THURSDAY 734.838.9800
Nobody FRIDAY 634.296.3356
Mary SATURDAY 313.449.1390
Ted SUNDAY 248.496.2204
以下“一行”将按一周中的某一天对其进行排序:
$ { sed -n 1p input;
for d in SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY
do grep " $d " input || printf "%-10s%-12s888.000.8888\n" "Nobody" "$d"; done }
Name On-Call Phone
Ted SUNDAY 248.496.2204
Carol MONDAY 248.344.5576
Bob TUESDAY 313.123.4567
Alice WEDNESDAY 616.556.4458
Dave THURSDAY 734.838.9800
Nobody FRIDAY 634.296.3356
Mary SATURDAY 313.449.1390
大{ ... }
括号将命令组合在一起(以便您可以根据需要将输出重定向到新文件);该sed
命令打印标题;并且循环按照您想要的顺序for
给出每一天。grep
这利用了这样一个事实:您有一组硬编码的星期几名称,而且这些日子都不与标头中的任何字段名称匹配。如果标题可能匹配,您可以将内部更改grep
为:
sed 1d input | grep " $d "
另一个选项,更准确地匹配第二列中的星期几,是(对于内部循环):
awk -v day=$d '$2 == day' input