这是文件
$ 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
结尾的所有行/行?
输出就像
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
救援
awk -F, '$NF!=1 || $(NF-1)=="United States"'
或者,使用第一个字段
awk -F, '$1=="US" || $NF!=1'
,或者说等价于
awk -F, '!($1!="US" && $NF==1)'
您应该考虑要打印哪些记录,因为这就是脚本要做的。
Using 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,}$
匹配的任何行。