问题描述
我有一个.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
?是否可以使用awk
或sort
?
我尝试了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)
。