例如,这是list.txt
Joe 3
Jack 1
Ulysses 6
Fox 2
Cassidy 1
Jones 6
Kevin 7
那么输出应该是5
因为第二列中有 5 个不同的值。
我应该如何仅使用来完成这个sort
cut
wc
uniq
?
我有一个想法,首先使用sort -k2n
按升序对第二列进行排序,然后使用uniq
消除第二列重复的行,然后结果会像
Cassidy 1
Fox 2
Joe 3
Jones 6
Kevin 7
然后我用来cut -d ' ' -f2
列出所有数字1 2 3 6 7
,然后我用来wc -d
计算不同值的数量,这将返回5
。
我应该在uniq
部分中做什么来消除具有相同编号的重复行?
有没有一种简单的方法可以实现这一点?
答案1
我将从以下开始,cut
因为您只关心第 2 列中的唯一性:
cut -d' ' list.txt
结果是:
1
2
1
3
6
7
6
现在你想要独特的价值观; uniq 会这样做,但前提是它已排序。如果您要排序,请继续使用排序的 -u 标志:
cut -d' ' -f2 list.txt | sort -u
结果是:
1
2
3
6
7
现在您可以使用wc
来计算输出的行数:
cut -d' ' -f2 list.txt | sort -u | wc -l
这给你:
5
请注意,我们依赖于 list.txt 文件的特定格式——人名中没有空格!
答案2
我会选择:
sort -k2,2 -u names | wc -l
5
哪里names
有这个内容:
cat names
Joe 3
Jack 1
Ulysses 6
Fox 2
Cassidy 1
Jones 6
Kevin 7
答案3
既然你需要使用-sort -cut -wc -uniq
,那么似乎所需的命令行应该是这样的:
$ cut -d' ' -f2 file.txt | sort -n | uniq | wc -l
5