Warm tip: This article is reproduced from serverfault.com, please click

sed-我可以删除awk中的字段吗?

(sed - Can I delete a field in awk?)

发布于 2020-12-14 05:14:59

这是test.txt

0x01,0xDF,0x93,0x65,0xF8
0x01,0xB0,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,0xB2,0x00,0x76

如果我运行 awk -F, 'BEGIN{OFS=","}{$2="";print $0}' test.txt ,结果是:

0x01,,0x93,0x65,0xF8
0x01,,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,,0x00,0x76

$ 2没有被删除,只是变成了空的。我希望在打印$ 0时结果是:

0x01,0x93,0x65,0xF8
0x01,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,0x00,0x76
Questioner
Edward
Viewed
0
RavinderSingh13 2020-12-14 13:30:26

我相信最简单的方法是使用subfunction将,,single的第一次出现的continuous (在你将第二个字段设置为NULL之后创建),但这假设你在字段值之间没有任何逗号。

awk 'BEGIN{FS=OFS=","}{$2="";sub(/,,/,",");print $0}' Input_file

第二个解决方案:或者,你可以使用match函数从第一个逗号到下一个逗号的出现来捕获正则表达式,并获取匹配的字符串的前后。

awk '
match($0,/,[^,]*,/){
  print substr($0,1,RSTART-1)","substr($0,RSTART+RLENGTH)
}' Input_file