答え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 "
2番目の列の曜日とより正確に一致する別のオプションは、(内部ループの場合)次のようになります。
awk -v day=$d '$2 == day' input