ファイル名とレコード数を含むテキストファイルがあります。ファイル名の最初の部分が同じであれば、レコード数を追加したいと思います。
カウント.txt:
aa_20201123.csv 1000
bb_20201123.csv 1500
bb_20201124.csv 2500
出力は次のようになります。
aa*.csv 1000
bb*.csv 4000
答え1
そしてawk
:
awk -F'[_ ]' '
{ sum_records[$1"*.csv"] +=$NF; };
END { for (x in sum_records) print x, sum_records[x]; }' infile
フィールド区切り文字をアンダースコアとスペースで定義し、同じ最初のフィールドのそれぞれについてレコード数を合計してEND { ... }
ブロックに印刷します。
出力:
bb*.csv 4000
aa*.csv 1000
上記のファイル名のサフィックスは、私たちがハードコードしたものですが、.csv以上のファイル名がある場合は、次のように変更できます。
awk -F'[_ .]' '
{ sum_records[$1 "*." $3]+=$NF; };
END { for (x in seen) print x, seen[x]; }' infile
また、フィールド区切りリストにドットを追加し、ハードコーディングされた項目の.
代わりに使用されました。$3
"csv"
次の入力の場合:
aa_20201123.csv 1000
bb_20201123.csv 1500
bb_20201123.txt 1234
bb_20201124.csv 2500
これにより、次の出力が提供されます。
bb*.csv 4000
aa*.csv 1000
bb*.txt 1234