如何使用 gawk 打印出大于 10 个字符的第 3 列,而不考虑字符串中的逗号
How to use gawk to print out the 3rd column that is greater than 10 characters regardless of comma in the string
我有一个 csv 文件,其中一些地址中间有一个逗号,因此我无法使用
$ awk -F',' 'length() >= 10 {print }' schools.csv
我的数据示例如下所示
id,name,address
"1","paul","103 avenue"
"2","shawn","108 BLVD, SE"
"3","ryan","MLK drive 1004"
如您所见,id 2 的地址之间有一个逗号,所以我必须使用 gawk 模块 4。到目前为止,无论是否有逗号,我都能够打印每一行,但我只想要打印字段大于 10 个字符的第 3 列(地址)。这是我到目前为止所拥有的。
//awk.awk file
BEGIN {
FPAT = "([^,]+)|(\"[^\"]+\")"
}
{
print "NF = ", NF
for (i = 1; i <= NF; i++) {
printf("$%d = <%s>\n", i, $i)
}
}
$ gawk -f awk.awk schools.csv
期望输出只是
108 BLVD, SE 或“108 BLVD, SE”
好吧,因为您已经在使用 GNU awk,您可以利用 gensub
删除 length
:
的前导和尾随双引号
$ gawk 'BEGIN {
FPAT = "([^,]*)|(\"[^\"]+\")"
}
length(gensub(/^\"|\"$/,"","g",))>=10 {
print
}' file
输出:
"103 avenue"
"108 BLVD, SE"
"MLK drive 1004"
如果您还想要不带双引号的输出:
{
gsub(/^"|"$/,"",)
if(length()>=10)
print
}
我有一个 csv 文件,其中一些地址中间有一个逗号,因此我无法使用
$ awk -F',' 'length() >= 10 {print }' schools.csv
我的数据示例如下所示
id,name,address
"1","paul","103 avenue"
"2","shawn","108 BLVD, SE"
"3","ryan","MLK drive 1004"
如您所见,id 2 的地址之间有一个逗号,所以我必须使用 gawk 模块 4。到目前为止,无论是否有逗号,我都能够打印每一行,但我只想要打印字段大于 10 个字符的第 3 列(地址)。这是我到目前为止所拥有的。
//awk.awk file
BEGIN {
FPAT = "([^,]+)|(\"[^\"]+\")"
}
{
print "NF = ", NF
for (i = 1; i <= NF; i++) {
printf("$%d = <%s>\n", i, $i)
}
}
$ gawk -f awk.awk schools.csv
期望输出只是
108 BLVD, SE 或“108 BLVD, SE”
好吧,因为您已经在使用 GNU awk,您可以利用 gensub
删除 length
:
$ gawk 'BEGIN {
FPAT = "([^,]*)|(\"[^\"]+\")"
}
length(gensub(/^\"|\"$/,"","g",))>=10 {
print
}' file
输出:
"103 avenue"
"108 BLVD, SE"
"MLK drive 1004"
如果您还想要不带双引号的输出:
{
gsub(/^"|"$/,"",)
if(length()>=10)
print
}