如何使用awk在文件末尾添加记录计数

时间:2013-02-16 19:23:50

标签: awk

我的文件如下

H|ACCT|EXEC|1|TEMP|20130215035845|
849002|48|1208004|1
849007|28|1208004|1
855003|48|1208004|1
855004|28|1208004|1
855006|28|1208004|1
855008|28|1208004|1
855011|28|1208004|1

我想添加记录计数-1(因为第一条记录不是孔记录的一部分) 我需要输出如下

H|ACCT|XEC|1|TEMP|20130215035845|
849002|48|1208004|1
849007|28|1208004|1
855003|48|1208004|1
855004|28|1208004|1
855006|28|1208004|1
855008|28|1208004|1
855011|28|1208004|1
T|7

我在下面尝试选项awk 'NF != 0 {++count} END {print count} 但它不是写在文件的末尾,如何计算和添加结果。

3 个答案:

答案 0 :(得分:2)

试试这一行:

awk '1;END{print "T|"NR-1}' file

以你的例子:

kent$  echo "H|ACCT|EXEC|1|TEMP|20130215035845|
849002|48|1208004|1
849007|28|1208004|1
855003|48|1208004|1
855004|28|1208004|1
855006|28|1208004|1
855008|28|1208004|1
855011|28|1208004|1"| awk '1;END{print "T|"NR-1}'
H|ACCT|EXEC|1|TEMP|20130215035845|
849002|48|1208004|1
849007|28|1208004|1
855003|48|1208004|1
855004|28|1208004|1
855006|28|1208004|1
855008|28|1208004|1
855011|28|1208004|1
T|7

答案 1 :(得分:1)

使用内置NR变量

您不需要使用显式计数器。您可以使用内置的NR(记录数)变量。例如:

awk 'END { print NR-1 }' /path/to/file

答案 2 :(得分:0)

你真的不需要awk。你实际上可以使用coreutils和一些嵌套来做到这一点。您还可以避免使用临时文件。尝试:

echo "T|$(( $(wc -l < file) - 1 ))" >> file