如何使用 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 
}