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

laximzn5  于 2022-10-17  发布在  Unix
关注(0)|答案(5)|浏览(242)

我有一个有2列和n行数的文件。
列1包含names和列2 age
我想根据age(在第二列中)以升序对此文件的内容进行排序。
结果应该显示最年轻的人的name,然后是name,然后是第二年轻的人,依此类推。
对单行程序、外壳或bash脚本的任何建议。

jvidinwx

jvidinwx1#

您可以使用sort commandkey选项,它接受“field number”,所以如果您想要第二列:

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
carvr3hs

carvr3hs2#

解决方案:

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将从每行中的第五个field开始排序,而不是每行中的第五个字符*)。
  • -n**-此选项指定“数字排序”,即应将该列解释为一行数字,而不是文本。

更多:

其他常见选项包括:

  • -r**-此选项颠倒排序顺序。也可以写成**--反向**。
  • -i**-此选项忽略不可打印的字符。也可以写为**--忽略-不打印**。
  • -b**-此选项忽略前导空格,这很方便,因为使用空格来确定行数。也可以写成**--忽略前导空格**。
  • -f**-此选项忽略字母大小写。“A”==“a”。也可以写为**--Ignore-Case**。
  • -t*[新分隔符]*-此选项使预处理使用除空格以外的运算符。也可以写成**--字段分隔符**。

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

jc3wubiy

jc3wubiy3#

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

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

-r可用于按降序获取数据。
-n表示数字排序
-k,--key=pos1[,pos2]其中k是文件中的列
对于降序,下面是代码

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

slmsl1lt4#

使用sort

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

2ledvvac5#

简单

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

相关问题