我有一个包含这样的行的文件
LINEID1:FIELD1=ABCD,&FIELD2-0&FIELD3-1&FIELD4-0&FIELD9-0;
LINEID2:FIELD1=ABCD,&FIELD5-1&FIELD6-0;
LINEID3:FIELD1=ABCD,&FIELD7-0&FIELD8-0;
LINEID1:FIELD1=XYZ,&FIELD2-0&FIELD3-1&FIELD9-0
LINEID3:FIELD1=XYZ,&FIELD7-0&FIELD8-0;
LINEID1:FIELD1=PQRS,&FIELD3-1&FIELD4-0&FIELD9-0;
LINEID2:FIELD1=PQRS,&FIELD5-1&FIELD6-0;
LINEID3:FIELD1=PQRS,&FIELD7-0&FIELD8-0;
我只对以LINEID1开头的行以及该行中的某些元素(FIELD1,FIELD2,FIELD4和FIELD9)感兴趣。输出应如下所示(不带&号。可以用|代替)
FIELD1=ABCD|FIELD2-0|FIELD4-0|FIELD9-0;
FIELD1=XYZ|FIELD2-0|FIELD9-0;
FIELD1=PQRS|FIELD4-0|FIELD9-0;
如果需要其他信息,请告诉我,我将它们发布在编辑中。谢谢!!
纯awk:
awk -F ":" ' /LINEID1[^0-9]/{gsub(/FIELD[^1249]+[-=][A-Z0-9]+/,"",$2); gsub(/,*&+/,"|",$2); print $2} ' file
已更新以提供正确的格式并省略LINEID11等。
输出:
FIELD1=ABCD|FIELD2-0|FIELD4-0|FIELD9-0;
FIELD1=XYZ|FIELD2-0|FIELD9-0
FIELD1=PQRS|FIELD4-0|FIELD9-0;
解释:
awk -F ":"
-将行分为LHS($ 1)和RHS($ 2),因为输出只需要RHS
/LINEID1[^0-9]/
-仅返回与LINEID1匹配并且也忽略LINEID11,LINEID100等的行...
gsub(/FIELD[^1249]+[-=][A-Z0-9]+/,"",$2)
-删除RHS上所有非1、4或9的字段
gsub(/,*&+/,"|",$2)
-清理RHS上的剩余分隔符
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句