2

我有如下文件

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} 但它没有写在文件末尾,如何计算和添加结果。

4

3 回答 3

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
于 2013-02-16T19:37:21.820 回答
1

使用内置 NR 变量

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

awk 'END { print NR-1 }' /path/to/file
于 2013-02-16T19:27:49.680 回答
0

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

echo "T|$(( $(wc -l < file) - 1 ))" >> file
于 2013-02-17T08:34:16.457 回答