我有很多制表符分隔的文件,其中的行格式如下:
...
some_str\tsome_str\tsome_str\tsome_str\tsome_int
some_str\tsome_str\tsome_str\tsome_str\tsome_int
...
前四列在所有列中都相同,但最后一列因文件而异。有没有一种简单的方法可以在bash中创建一个文件,前四列是相同的,最后一列是所有文件的最后一列的总和?像:
...
some_str\tsome_str\tsome_str\tsome_str\tsum_of_that_value_in_all_files
some_str\tsome_str\tsome_str\tsome_str\tsum_of_that_value_in_all_files
...
如果可能的话,我正在寻找一个简单的单行内容。
答案 0 :(得分:2)
awk -F'\t' -v OFS='\t' '{a[$1 FS $2 FS $3 FS $4]+=$5}
END{for(x in a)print x,a[x]}' *.tsv (or other patterns for all your files)
该命令未经过测试,但我认为应该进行测试。如果要将结果保存到其他文件,只需在末尾添加> newFile
。
答案 1 :(得分:1)
类似awk
,但未修复列数
$ awk ' {k=$NF; sub(k"$",""); sum[$0]+=k}
END {for(k in sum) print k,sum[k]}' files
记录的顺序可能不会被保留,但也不受任何文件中键的顺序的影响。