我有带有文件名和记录数的文本文件;如果文件名的第一部分相同,我想添加记录计数:
计数.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