使用行计数值(awk?)更新最后一个字段

时间:2014-02-20 09:53:12

标签: awk

我有一个管道分隔文件(file.001),如下所示:

00|FIELD10|FIELD02
01|FIELD01|FIELD02|FIELD03
01|FIELD01|FIELD02|FIELD03
01|FIELD01|FIELD02|FIELD03
01|FIELD01|FIELD02|FIELD03
99|4

以'01'开头的行是记录(00 =标题,99 =预告片)。预告片中的最后一个字段(当前填充为“4”)是记录计数,但此记录计数并不总是准确。

我想要做的是计算记录数量并更新记录计数字段,同时保持其余数据不变(打印到新文件会很好,理想情况下它会在同一个文件中)。我对此的解释是将计数值打印到最后一个字段值,但我不知道如何执行此操作。

我一直在尝试使用awk,目前有以下内容用于打印计数和最后一个字段:

打印记录数:

awk '/^01/ {count++} END {print count }' file.001

打印最后一个字段:

awk 'BEGIN {RS="|"}; END {print ($(NF))}' file.001

有人可以就如何做到这一点提出建议吗? 如果我到目前为止所拥有的内容不是很好,我是新来的awk。我也愿意使用除awk以外的东西来实现这一目标。

1 个答案:

答案 0 :(得分:0)

鉴于你的第一个awk声明,我很惊讶你没有使用这样的东西打印最后一个字段(记录数):

awk -F '|' '/^99/ { print $NF }' file

'预告片'始终以'99'开头,对吗?因此,您可以使用它来对文件进行所需的更改。也许尝试以下方法:

awk 'BEGIN { OFS=FS="|" } $1 == "01" { c++ } $1 == "99" { $2 = c }1' file


如果您拥有最新的gawk,则可以使用“就地”编辑:

gawk -i inplace '...' file

请注意,这与:

相同
gawk '...' file > file.tmp && mv file.tmp file