如果其中一个字段小于某个值,如何打印列中的某些字段?

问题描述

我有一个.txt文件,其中包含有关100所大学的数据,格式为

{COLLEGE NAME} {CITY,STATE} {RANK} {TUITION} {IN STATE TUITION} {ENROLLMENT}

例如,这里有两行

YeshivaUniversity "New York,NY" 66 "$40,670 "  "2,744" 
FordhamUniversity "New York,NY" 60 "$47,317 "  "8,855"

还有98行,输出应该返回所有学费少于$ 30000的大学?

假设字段分隔符为空格,我如何打印{COLLEGE NAME} {CITY,STATE} {TUITION}小于{TUITION}的大学$30,000?是否可以使用awksort

我尝试了awk和运算符<=的某些组合,但是每次都会出错。例如

$ awk -F" " '{print $1,$2,$4<=30000}' data1a.txt

给我一​​个语法错误

解决方法

使用GNU awk,因为它有FPAT

$ gawk '
BEGIN {
    FPAT="([^ ]*)|(\"[^\"]+\")"
}
{
    tuition=$4                    # separate 4th column for cleaning
    gsub(/[^0-9]/,"",tuition)     # clean non-digits off
    if(tuition<30000)             # compare
        print                     # and output
}'

示例数据的输出:

(下一次,请张贴带有阳性和阴性病例的样本。)

此外,它在注释中被提及:由单个空格分隔,您在大学名中有一个空格。当我看到您的问题时,情况已不再如此,但可以通过从头算起字段来解决。 $4将是$(NF-1)