使用sort,grep LINUX从列表中删除行

时间:2014-02-05 16:20:46

标签: linux sorting grep gnu

我有一个类似的列表:

#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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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

$ 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