我有一些用标签分隔的数据
8/1/12 15:22 622070509 Pig 123123123
8/1/12 15:27 569038096 Monkey 123123123
8/1/12 15:21 389549550 CatDog 123123
8/1/12 15:26 558161100 Monkey 1231245
8/1/12 15:28 274990777 CatDog 112312
8/1/12 15:22 274990777 CatDog 12341
我想按出现次数对第四列进行排序,按降序排列,因此输出结果如下:
8/1/12 15:22 274990777 CatDog 12341
8/1/12 15:28 274990777 CatDog 112312
8/1/12 15:21 389549550 CatDog 123123
8/1/12 15:26 558161100 Monkey 1231245
8/1/12 15:27 569038096 Monkey 123123123
8/1/12 15:22 622070509 Pig 123123123
到目前为止:
sort -t$'\t' -k4 file.txt
按字母顺序排序就好了,但是我没有看到按出现次数排序的参数。
答案 0 :(得分:0)
学会以算法思考。您将如何手动处理数据?
有一些Unix工具可以支持所有那些操作难度较大或较小的操作。确实,每个步骤都有多种方法。你可以用Perl或Python(或者确实是awk
)来完成所有这些工作。或者您可以使用awk
,join
,sort
和sed
分阶段进行此操作。
答案 1 :(得分:0)
cat infile.txt | awk -F \ t' {print $ 4}' | sort | uniq -c | sort -nr | awk {' print $ 2'} | xargs -I%grep%infile.txt> outfile.txt
答案 2 :(得分:-1)
您必须设置数字比较标志(-n):
sort -t$'\t' -k 4 -n file.txt
您还可以像这样定义第二个排序列:
sort -t$'\t' -k4n,4 -k3,3 file.txt
这将首先按数字排序第4列,当它找到相等的项目时,它将按字母顺序按第3列排序。