数据文件- data.txt:
ABC "I am ABC" 35 DESC
DEF "I am not ABC" 42 DESC
cat data.txt | awk '{print $2}'
将产生"I“而不是被引号的字符串。
如何使awk忽略引号中的空格,并认为它是一个单独的令牌?
发布于 2011-07-08 11:57:16
是的,这可以在awk中很好地完成。很容易获得所有的字段,而不需要任何严重的黑客攻击。
(此示例在The One True Awk和gawk中都有效。)
{
split($0, a, "\"")
$2 = a[2]
$3 = $(NF - 1)
$4 = $NF
print "and the fields are ", $1, "+", $2, "+", $3, "+", $4
}
发布于 2017-04-05 01:25:41
另一种选择是使用FPAT
变量,该变量定义一个正则表达式来描述每个字段的内容。
将此AWK脚本另存为parse.awk
#!/bin/awk -f
BEGIN {
FPAT = "([^ ]+)|(\"[^\"]+\")"
}
{
print $2
}
使其可用chmod +x ./parse.awk
执行,并将数据文件解析为./parse.awk data.txt
"I am ABC"
"I am not ABC"
发布于 2011-07-08 11:22:08
试试这个:
$ cat data.txt | awk -F\" '{print $2}'
I am ABC
I am not ABC
https://stackoverflow.com/questions/6619619
复制相似问题