使用Linux的cut、sort和uniq命令

10

我有一个包含人口数量、年份和县的列表,我需要对该列表进行切割,然后找到唯一县的数量。

列表如下所示:

#Population,    Year,   County
3900,   1969,   Beaver
3798,   1970,   Beaver
3830,   1971,   Beaver
3864,   1972,   Beaver
3993,   1973,   Beaver
3976,   1974,   Beaver
4064,   1975,   Beaver

这个列表还有很多内容,包括许多县。我需要剪切掉县的列,将其排序,然后输出唯一县的数量。我尝试了以下命令:

 cut -c3- list.txt | sort -k3 | uniq -c

但是这并没有切掉第三个列表,也没有按字母顺序排序。我做错了什么?
2个回答

17
您可以添加一个分隔符,这个例子中是逗号:
cut -f 3 -d, list.txt | sort | uniq

那么,-c 指定的是 字符 位置,而不是用 -f 指定的字段。

要去掉前面的空格,您可以通过管道将所有内容传递给 awk '{print $1}'

cut -f 3 -d, list.txt | awk '{print $1}' | sort | uniq

[编辑]

当你尝试从第三个字段中cut出来时,管道后只剩下一个字段,因此在第三个字段上进行排序是行不通的,这就是我在示例中省略它的原因。你得到一个字段,只需在其上排序并应用uniq


太棒了,这个可行,谢谢。如果我想要在结果中打印行号,我该怎么做? - user2615699
2
awk 版本中,您可以直接输出第三个字段(即无需进行 cut 步骤)... - FabienAndre
@user2615699 不确定您要求什么...尝试添加 |cat -n - FabienAndre

4
你可以使用awk来提取第三个字段(以空格分隔),然后执行排序/去重操作。
awk '{print $3}' list.txt |sort |uniq -c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接