这是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
我相信最简单的方法是使用sub
function将,,
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