我有一个包含两列且n
行数的文件。
第1列包含names
和第2列age
。
我想根据age
(在第二列中)按升序对此文件的内容进行排序。
结果应显示最年轻人的name
和name
,然后是第二个最年轻的人等等......
有关单线程shell或bash脚本的任何建议。
答案 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 - 此选项指定"数字排序"意思是该列应该被解释为一行数字,而不是文本。
其他常见选项包括:
还有其他选择,但这些是最常见且最有用的选项,我经常使用。
答案 2 :(得分:5)
对于制表符分隔值,可以使用以下代码
sort -t$'\t' -k2 -n
-r可用于按降序获取数据
-n用于数字排序
对于下面的降序是代码
sort -t$'\t' -k2 -rn
答案 3 :(得分:3)
使用sort
。
sort ... -k 2,2 ...