我有一个管道分隔文件(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以外的东西来实现这一目标。
答案 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