awk 中的输入字段分隔符

awk 中的输入字段分隔符

我有许多大型数据文件。字段之间的分隔符是分号。但是我发现有些字段中有分号,所以我不能简单地使用分号作为字段分隔符。

以下示例有 4 个字段,但 awk 只能看到 3 个,因为字段 3 中的“1”被正则表达式删除(其中包括“-”,因为一些数字数据是负数):

echo '"This";"is";1;"line of; data"' | awk -F'[0-9"-];[0-9"-]' '{print "No. of fields:\t"NF; print "Field 3:\t" $3}'
No. of fields:  3
Field 3:        ;"line of; data"

当然,

echo '"This";"is";1;"line of; data"' | awk -F';' '{print "No. of fields:\t"NF}'
No. of fields:  5

解决了该问题,但将最后一个字段算作两个独立的字段。

有谁知道这个问题的解决办法吗?

谢谢!

马蒂斯

答案1

您需要使用GNU awkFPAT

awk 'BEGIN { FPAT = "([^;]+)|(\"[^\"]+\")" } { for (i=1; i<=NF; i++) print $i }'

测试:

echo '"This";"is";1;"line of; data"' | awk 'BEGIN { FPAT = "([^;]+)|(\"[^\"]+\")" } { for (i=1; i<=NF; i++) print $i }'

结果:

"This"
"is"
1
"line of; data"

相关内容