这是文件
$ cat temp
AG,17.060816,-61.796428,Antigua and Barbuda,1
AI,18.220554,-63.068615,Anguilla,1
AS,-14.270972,-170.132217,American Samoa,1
BB,13.193887,-59.543198,Barbados,1
BM,32.321384,-64.75737,Bermuda,1
BS,25.03428,-77.39628,Bahamas,1
CA,56.130366,-106.346771,Canada,1
DM,15.414999,-61.370976,Dominica,1
DO,18.735693,-70.162651,Dominican Republic,1
GD,12.262776,-61.604171,Grenada,1
GU,13.444304,144.793731,Guam,1
JM,18.109581,-77.297508,Jamaica,1
KN,17.357822,-62.782998,Saint Kitts and Nevis,1
KY,19.513469,-80.566956,Cayman Islands,1
LC,13.909444,-60.978893,Saint Lucia,1
MP,17.33083,145.38469,Northern Mariana Islands,1
MS,16.742498,-62.187366,Montserrat,1
PR,18.220833,-66.590149,Puerto Rico,1
TC,21.694025,-71.797928,Turks and Caicos Islands,1
TT,10.691803,-61.222503,Trinidad and Tobago,1
US,37.09024,-95.712891,United States,1
VC,12.984305,-61.287228,Saint Vincent and the Grenadines,1
AD,42.546245,1.601554,Andorra,376
AE,23.424076,53.847818,United Arab Emirates,971
AF,33.93911,67.709953,Afghanistan,93
AL,41.153332,20.168331,Albania,355
AM,40.069099,45.038189,Armenia,374
AN,12.226079,-69.060087,Netherlands Antilles,599
AO,-11.202692,17.873887,Angola,244
这将删除以,1
结尾的每一行/每行。
$ cat temp | grep -vE ',1$'
除了美国以外,如何删除以,1
结尾的每一行/每行?
所以我的outpit看起来像
AD,42.546245,1.601554,Andorra,376
AE,23.424076,53.847818,United Arab Emirates,971
AF,33.93911,67.709953,Afghanistan,93
AL,41.153332,20.168331,Albania,355
AM,40.069099,45.038189,Armenia,374
AN,12.226079,-69.060087,Netherlands Antilles,599
AO,-11.202692,17.873887,Angola,244
US,37.09024,-95.712891,United States,1 <<<<<<---US remains
答案 0 :(得分:4)
要求救援
awk -F, '$NF!=1 || $(NF-1)=="United States"'
或者,使用第一个字段
awk -F, '$1=="US" || $NF!=1'
或等同地
awk -F, '!($1!="US" && $NF==1)'
您应该考虑将要打印的记录,因为这是脚本将要执行的操作。
答案 1 :(得分:0)
使用grep
:
$ cat temp | grep -E ',(United States,1|[^1,]|[^,]{2,})$'
US,37.09024,-95.712891,United States,1
AD,42.546245,1.601554,Andorra,376
AE,23.424076,53.847818,United Arab Emirates,971
AF,33.93911,67.709953,Afghanistan,93
AL,41.153332,20.168331,Albania,355
AM,40.069099,45.038189,Armenia,374
AN,12.226079,-69.060087,Netherlands Antilles,599
AO,-11.202692,17.873887,Angola,244
或者,更好的是,消除cat
:
grep -E ',(United States,1|[^1,]|[^,]{2,})$' temp
我们已经消除了-v
并颠倒了逻辑。我们会打印与,United States,1$
匹配或匹配,[^1,]$
或匹配,[^,]{2,}$
的任何行。