Bashのcal関数を使用して「最初の」日付を選択します。

Bashのcal関数を使用して「最初の」日付を選択します。

cal関数とパイプコマンドawkで、最初の月曜日、2番目の火曜日、2番目の土曜日などを選択しようとしています。今月は受け取ることができます。最初の火曜日次のカレンダーコマンドを正しく使用してください。

    December 2018
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

>cal | awk 'NF == 7 && NR > 2 {print $3; exit}'
>4

しかし、これが常に動作するわけではありません。以下の2016年3月のテストをご覧ください。

     March 2016
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

>cal 3 2016 | awk 'NF == 7 && NR > 2 {print $3; exit}'
>8

上の例では機能しますが、下の例では機能しないのはなぜですか?私の考えでは、次の例は3行目を見て正しい結果を見つける必要があると思います1。私が使用できる確実な方法はありますかawk?列が空であることを確認し、次の行に移動してこの日付を取得できますか?

ベストアンサー1

ここにあなたのための別の解決策があります

cal | awk 'NR >= 3 { tu = substr($0,7,2) +0 } tu { print tu; exit }'
4

cal 3 2016 | awk 'NR >= 3 { tu = substr($0,7,2) +0 } tu { print tu; exit }'
1

火曜日の列(文字7と8)を選択し、ゼロ以外の最初の値を指定します。この方法は、どの曜日でも安全に推定できます。

おすすめ記事