如果文件名的第一部分与下一行相同,则添加记录数

如果文件名的第一部分与下一行相同,则添加记录数

我有带有文件名和记录数的文本文件;如果文件名的第一部分相同,我想添加记录计数:

计数.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

相关内容