Linux 如何在以制表符分隔的文件中输出唯一项列表
我有一份档案Linux 如何在以制表符分隔的文件中输出唯一项列表,linux,Linux,我有一份档案 1 ABC 123 345 Apples 1 ABC 345 345 Apples 1 ABC 123 345 Apples_Fuji 1 ABC 123 345 ApplesApplesApples 1 ABC 123 345 Pears 1 ABC 123 345 Banana ... 我想得到一个输出文件 Apples 2 Apples_Fuji 1 ApplesApplesApples 1 Pears 1 Banana 1 ... 我不确定一次一个地将
1 ABC 123 345 Apples
1 ABC 345 345 Apples
1 ABC 123 345 Apples_Fuji
1 ABC 123 345 ApplesApplesApples
1 ABC 123 345 Pears
1 ABC 123 345 Banana
...
我想得到一个输出文件
Apples 2
Apples_Fuji 1
ApplesApplesApples 1
Pears 1
Banana 1
...
我不确定一次一个地将它们变灰是否有效(-o无论如何都不准确,-c每次都奇怪地给我一个值1)。试试awk
:
$ awk '{arr[$NF]++}END{for(i in arr) print i,arr[i]}' file
ApplesApplesApples 1
Apples 2
Banana 1
Apples_Fuji 1
Pears 1
另一种方法是使用grep
和uniq
:
$ grep -oE '[^ ]+$' file | sort | uniq -c
2 Apples
1 Apples_Fuji
1 ApplesApplesApples
1 Pears
1 Banana
使用awk/sort/uniq的一种解决方案可以是:
cat file|awk '{print $5}'|sort|uniq -c
在Perl中:
perl -lane '$h{$F[4]}++ unless(/^\s*$/);END{print "$_ $h{$_}" for(keys %h)}' your_file
测试如下:
> cat temp
1 ABC 123 345 Apples
1 ABC 345 345 Apples
1 ABC 123 345 Apples_Fuji
1 ABC 123 345 ApplesApplesApples
1 ABC 123 345 Pears
1 ABC 123 345 Banana
> perl -lane '$h{$F[4]}++ unless(/^\s*$/);END{print "$_ $h{$_}" for(keys %h)}' temp
Pears 1
ApplesApplesApples 1
Banana 1
Apples 2
Apples_Fuji 1
>
具有切割、排序、uniq的解决方案
cat test | cut -f5,5 | sort | uniq -c
令人惊叹的。我一直在思考“awk