ファイル名の最初の部分が次の行と同じ場合は、レコード数を追加します。

ファイル名の最初の部分が次の行と同じ場合は、レコード数を追加します。

ファイル名とレコード数を含むテキストファイルがあります。ファイル名の最初の部分が同じであれば、レコード数を追加したいと思います。

カウント.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

おすすめ記事