如何获取文本文件中前10%的行?

时间:2016-09-20 15:59:54

标签: bash

我有一个包含多列的测试文件。我想基于包含数值的第8列进行排序,然后获取前10%的行并将它们导出到新文件。

我更喜欢在bash中这样做。我知道我可以排序-k8 -n进行排序,但我无法完成第二项任务。

输出:

如果我的文本文件有1000行,我只想要前100行。

文件以制表符分隔。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您可以将整个文件放入内存,那么您可以将输出发送到awk:

sort -nk8 file | awk '{ a[NR] = $0 } END { 
  for (i = 1; i <= NR / 10; ++i) print a[i] 
}'

每一行都保存在数组a中,由行号索引。第一行NR / 10行打印出来。

如果你有GNU awk,你甚至可以同时进行排序:

awk '{ a[NR] = $0 } END { 
  asort(a, b, "@val_num_asc"); for (i = 1; i <= NR / 10; ++i) print b[i] 
}' file

读取所有(未排序的)行后,asort按编号按升序排序。

另一种方法是将sort的结果输出到文件,然后使用以下内容:

head -n $(( $(wc -l < file) / 10 )) file

请记住shell算术只是整数,所以如果文件中有1009行,那么只输出100行。

相关问题