我有这样的输入,我想附加一个值,它应该为下一个找到的ID添加值,它应该按顺序递增它在文件中找到的每个值
简而言之,找到FR:(516554)& AT:(929121)并向其添加序号并用新生成的值FR替换该值:(516554001)& AT:(929121001)
我的输入文件'NKN + S:KSSSS + FR:516554 + 20020716 ++ 2'NKN + S:KSSSS + AT:929121 + 19991116 ++ 2'' NKN + S:KSSSS + FR:516555 + 20020716 ++ 2'NKN + S:KSSSS + AT:929122 + 19991116 ++ 2''NKN + S:KSSSS + FR:516556 + 20020716 ++ 2'NKN + S:KSSSS +的 AT:929123 + 19991116 ++ 2'
输出文件应该是这样的'NKN + S:KSSSS + FR:516554001 + 20020716 ++ 2'NKN + S:KSSSS + AT:929121001 +19991116+ +2''NKN + S:KSSSS + FR:516555002 + 20020716 ++ 2'NKN + S:KSSSS + AT:929122002 + 19991116 ++ 2''NKN + S :KSSSS +的 FR:516556003 + 20020716 ++ 2'NKN + S:KSSSS +的 AT:929123003 + 19991116 ++ 2'
非常感谢提前
干杯
距
答案 0 :(得分:0)
如果您在生成00x
格式编号时遇到问题:
kent$ seq 10|awk '{printf "%03d\n",$0}'
001
002
003
004
005
006
007
008
009
010
对于您的问题,您可以将FS
和OFS
设置为+
并检查该字段是否以FR:/AT:
开头,以确定是否应添加序列:
awk -F'+' -v OFS="+"
'{s=sprintf("%03d",NR);for(x=1;x<=NF;x++)$x=$x ($x~/^AT:|^FR:/?s:"")}7' input
答案 1 :(得分:0)
awk 解决方案:
awk '$0~/FR|AT/{ c++; gsub(/(FR|AT):[0-9]+/,"\&"sprintf("%03d",c),$0) }1' file
输出:
'NKN+S:KSSSS+FR:516554001+20020716++2'NKN+S:KSSSS+AT:929121001+19991116++2'
'NKN+S:KSSSS+FR:516555002+20020716++2'NKN+S:KSSSS+AT:929122002+19991116++2'
'NKN+S:KSSSS+FR:516556003+20020716++2'NKN+S:KSSSS+AT:929123003+19991116++2'