我有一个文件的2列和n行数。
n
columnn1包含names和column2 age。
names
age
我想根据age(在第二列)升序对该文件的内容进行排序。
结果应该显示最年轻的人的name以及name,然后是第二年轻的人,依此类推……
name
关于单行shell或bash脚本的任何建议。
使用sort。
sort
sort ... -k 2,2 ...
你可以使用sort命令的key选项,它接受一个“;字段号”,所以如果你想要第二列:
key
sort -k2 -n yourfile
-n, --numeric-sort根据字符串数值进行比较
-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个字符)
-k5
-n -该选项指定了一个“数字排序”,这意味着列应该被解释为一行数字,而不是文本。
其他常见的选项包括:
还有其他选择,但这些是最常见和最有用的,我经常使用。
对于由制表符分隔的值,可以使用下面的代码
sort -t$'\t' -k2 -n
-r可用于按降序获取数据 -n数值排序 -k,——key=POS1[,POS2],其中k是文件中的列 下面的降序代码是
sort -t$'\t' -k2 -rn
简单的
$ sort -k2,2n <<<"$data"