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

Ang*_*elo 184 unix bash shell

我有一个包含两列和n多行的文件.

第1列包含names和column2 age.

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

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

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

Mat*_*all 292

您可以使用以下sort命令:

sort -k2 -n yourfile
Run Code Online (Sandbox Code Playgroud)

-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
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要使用 -t 选项指定分隔符 (2认同)

DCu*_*rro 78

解:

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
Run Code Online (Sandbox Code Playgroud)

说明:

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

  • -n - 此选项指定"数字排序",表示该列应解释为一行数字而不是文本.


更多:

其他常见选项包括:

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

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


Sau*_*abh 7

为制表符分隔值下面的代码可以使用

sort -t$'\t' -k2 -n
Run Code Online (Sandbox Code Playgroud)

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

sort -t$'\t' -k2 -rn
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 6

使用sort.

sort ... -k 2,2 ...
Run Code Online (Sandbox Code Playgroud)

  • 您还需要使用 -n 根据年龄进行排序(数字排序)。否则 '11' 将出现在 '2' 之前。 (9认同)