除了这个不同的标准,删除所有带有标准的行

  • 本文关键字:标准 删除 bash awk grep
  • 更新时间 :
  • 英文 :


这是文件

  $ 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,}$匹配的任何行。

最新更新