如何按星期几排序?

如何按星期几排序?

我正在做一个项目,它与我刚刚发现的下面的项目非常相似,所以我不想给任何人再次阅读带来麻烦,但是在问题中我发现了最佳答案用户必须创建一个名为 的额外文件file3,这是我不想创建的。我也在考虑grep命令,也考虑过使用 while 循环。有人有办法启动这个脚本吗?

如何按星期几排序?

换句话说,问题是:给出替代解决方案这个答案无需创建任何额外的文件(如file3示例中所示)。

答案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

相关内容