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

我有一个文件的2列和n行数。

columnn1包含names和column2 age

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

结果应该显示最年轻的人的name以及name,然后是第二年轻的人,依此类推……

关于单行shell或bash脚本的任何建议。

304485 次浏览

使用sort

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

你可以使用sort命令key选项,它接受一个“;字段号”,所以如果你想要第二列:

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

解决方案:

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将从每行第5个字段开始排序,而不是每行第5个字符)

  • -n -该选项指定了一个“数字排序”,这意味着列应该被解释为一行数字,而不是文本。


更多:

其他常见的选项包括:

  • - r -该选项颠倒排序顺序。它也可以写成——反向
  • -我 -该选项忽略不可打印字符。它也可以写成——ignore-nonprinting
  • - b -此选项忽略前导空白,这很方便,因为空白用于确定行数。它也可以写成——ignore-leading-blanks
  • - f -该选项忽略字母大小写。“= =””。它也可以写成——忽略大小写
  • -t [新分隔符] . txt -该选项使预处理使用空格以外的操作符。它也可以写成——字段分隔符

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

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

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

-r可用于按降序获取数据 -n数值排序
-k,——key=POS1[,POS2],其中k是文件中的列
下面的降序代码是

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

简单的

$ sort -k2,2n <<<"$data"