awk:レコードをパターン一致に設定し、最後のレコードのみを印刷します。

awk:レコードをパターン一致に設定し、最後のレコードのみを印刷します。

awkを使用してパターンマッチング後に最後のレコードのみを出力する方法はありません。

各「記録」はDATEで始まり、ダッシュで終わります。

私は以下を試しましたが、運がありません。

awk '/02\/21\/19/,/---/; END{print}' sample.file

しかし、これは私が期待した最後のレコードではなく、すべてのレコードを提供するだけです。

サンプルデータ:この2つの完全なレコードを呼び出します。与えられた時間に最後の1つだけが必要です。

02/21/19 14:00:00 - 15:00:00
Total:
 ID        Total            Approved          Rejected
 All           1             0 (  0%)          1 (100%)

Total By Consumer:
 ID        Total            Approved          Rejected
123            1             0 (  0%)          1 (100%)

Total By Supply:
 ID        Total            Approved          Rejected
3878           1             0 (  0%)          1 (100%)
--------------------------------------------------------
02/21/19 15:00:00 - 16:00:00
Total:
 ID        Total            Approved          Rejected
 All           7             0 (  0%)          7 (100%)

Total By Consumer:
 ID        Total            Approved          Rejected
3398            7             0 (  0%)          7 (100%)

Total By Supply:
 ID        Total            Approved          Rejected
3878           3             0 (  0%)          3 (100%)
190            4             0 (  0%)          4 (100%)
-------------------------------------------------------- 

また、sedがうまくいくと思いましたが、それでもエラーが発生します。

sed -n '/02\/21\/19/,/----/,$p'
sed: -e expression #1, char 20: unknown command: `,'

予想される出力は最後のレコードです。

02/21/19 15:00:00 - 16:00:00
Total:
 ID        Total            Approved          Rejected
 All           7             0 (  0%)          7 (100%)

Total By Consumer:
 ID        Total            Approved          Rejected
3398            7             0 (  0%)          7 (100%)

Total By Supply:
 ID        Total            Approved          Rejected
3878           3             0 (  0%)          3 (100%)
190            4             0 (  0%)          4 (100%)

どんなアイデアがありますか?

ベストアンサー1

履歴が行で区切られ---、提供された日付のうち最後の日付を印刷するには、次のように使用できます。

awk -v RS='\n-+' -v d='02/21/19' '$1 == d {x = $0} END {print x}'

前任者。

$ awk -v RS='\n-+' -v d='02/21/19' '$1 == d {x = $0} END {print x}' data

02/21/19 15:00:00 - 16:00:00
Total:
 ID        Total            Approved          Rejected
 All           7             0 (  0%)          7 (100%)

Total By Consumer:
 ID        Total            Approved          Rejected
3398            7             0 (  0%)          7 (100%)

Total By Supply:
 ID        Total            Approved          Rejected
3878           3             0 (  0%)          3 (100%)
190            4             0 (  0%)          4 (100%)

GNU awkがあり、レコード区切り文字を保持するには、x = $0次のように変更します。x = $0 RT

おすすめ記事