基于文件的第二列对数据进行排序

时间:2011-06-22 11:15:48

标签: bash shell unix

我有一个包含两列且n行数的文件。

第1列包含names和第2列age

我想根据age(在第二列中)按升序对此文件的内容进行排序。

结果应显示最年轻人的namename,然后是第二个最年轻的人等等......

有关单线程shell或bash脚本的任何建议。

4 个答案:

答案 0 :(得分:268)

您可以使用sort command

sort -k2 -n yourfile
  

-n--numeric-sort根据字符串数值

进行比较

例如:

$ cat ages.txt 
Bob 12
Jane 48
Mark 3
Tashi 54

$ sort -k2 -n ages.txt 
Mark 3
Bob 12
Jane 48
Tashi 54

答案 1 :(得分:70)

解决方案:

sort -k 2 -n filename

更详细地写为:

sort --key 2 --numeric-sort filename

实施例

$ cat filename
A 12
B 48
C 3

$ sort --key 2 --numeric-sort filename 
C 3
A 12
B 48

说明:

  • -k - 此参数指定将用于排序的第一列。 (请注意,此处的列定义为以空格分隔的字段;参数-k5将从每行中的第五个字段开始排序,而不是第五个字符每一行)

  • -n - 此选项指定"数字排序"意思是该列应该被解释为一行数字,而不是文本。

更多:

其他常见选项包括:

  • -r - 此选项可以反转排序顺序。它也可以写成 - reverse
  • -i - 此选项会忽略不可打印的字符。它也可以写成 - ignore-nonprinting
  • -b - 此选项忽略前导空格,这很方便,因为使用空格来确定行数。它也可以写成 - ignore-leading-blanks
  • -f - 此选项会忽略字母大小写。 " A" =="&#34 ;.它也可以写成 - ignore-case
  • -t [新分隔符] - 此选项使预处理使用空格以外的运算符。它也可以写成--field-separator。

还有其他选择,但这些是最常见且最有用的选项,我经常使用。

答案 2 :(得分:5)

对于制表符分隔值,可以使用以下代码

sort -t$'\t' -k2 -n

-r可用于按降序获取数据 -n用于数字排序
对于下面的降序是代码

sort -t$'\t' -k2 -rn

答案 3 :(得分:3)

使用sort

sort ... -k 2,2 ...