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