【问题标题】:removing line from list using sort, grep LINUX使用排序从列表中删除行,grep LINUX
【发布时间】:2014-02-06 00:28:33
【问题描述】:

我有一个看起来像这样的列表:

#Population,    Year,   County
3900,   1969,   Beaver
3798,   1970,   Beaver
3830,   1971,   Beaver
3864,   1972,   Beaver
3993,   1973,   Beaver
3976,   1974,   Beaver
4064,   1975,   Beaver
4074,   1976,   Beaver
4064,   1977,   Beaver
4194,   1978,   Beaver
4240,   1979,   Beaver

列表要长得多,但我没有包括其余的。我使用 grep 过滤列表以仅获取 1989 年,然后按人口从最多到最少的人口对其进行排序,但遇到了一个问题。

719048, 1989,   Salt Lake
260368, 1989,   Utah
219893, 1980,   Utah
185236, 1989,   Davis
157847, 1989,   Weber

如您所见,第三行是 1980 年,因为人口是 219893 并且其中包含数字 1989,所以正在显示它。如何过滤掉这条线?

我使用了这个命令: grep "1989" utah.txt | sort -nk1,1 -r

这些是我可以用来摆脱那条线的其他东西吗?

感谢您的帮助。

【问题讨论】:

    标签: linux sorting grep gnu


    【解决方案1】:

    您可能需要在您的grep 中使用-w。这样它只会匹配整个单词:

    $ grep -w 1989 file
    719048, 1989,   Salt Lake
    260368, 1989,   Utah
    185236, 1989,   Davis
    157847, 1989,   Weber
    

    注意区别:

    $ grep 1989 file
    719048, 1989,   Salt Lake
    260368, 1989,   Utah
    219893, 1980,   Utah   <---- without -w, this matches
    185236, 1989,   Davis
    157847, 1989,   Weber
    

    如果您愿意,awk 也可以通过指明您正在检查的字段来完成这项工作:

    $ awk '$2~1989' file
    719048, 1989,   Salt Lake
    260368, 1989,   Utah
    185236, 1989,   Davis
    157847, 1989,   Weber
    

    【讨论】:

    • 很高兴读到这一点 :) 请记住,如果您的问题得到解决,您可以接受答案。
    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多