AWK:总结第9列的最佳方法,打印总数和文件名?

时间:2018-01-26 19:08:30

标签: awk

所以我有大约303个files。它们都具有相同的格式但长度不同。我需要求和并打印第9列并捕获文件路径。所需格式为:

Filepath    sum of column 9

我可以使用以下方法轻松打印第9列的总数:

awk '{ sum += $9 } END { print sum }'

但是我在打印文件路径(不是文件名)时遇到麻烦,中间有2-3个空格。

这可能很简单,但我没有看到它...... 谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

使用FILENAME

$ awk '{sum+=$9} END {print FILENAME" "sum}' File

答案 1 :(得分:1)

如果你有GNU awk,你可以使用特殊的BEGINFILE和ENDFILE块

$ cat f1
13319
17767
18810
19357

$ cat f2
19631
16305
2962
19733

$ gawk 'BEGINFILE {sum = 0} {sum += $1} ENDFILE {print FILENAME, sum}' f1 f2
f1 69253
f2 58631

答案 2 :(得分:1)

你可以用 GNU Parallel 这样做得很好:

parallel --tag --quote awk '{t+=$9} END{print t+0}' ::: file*
  • --tag会使用文件名
  • 标记每一行
  • --quote处理引用awk脚本
  • :::标记参数的开始(文件名)