除了这个不同的标准之外,删除除了标准的每一行

时间:2015-08-19 02:54:55

标签: 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结尾的每一行/每行?

所以我的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

2 个答案:

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