当我运行以下命令时:
command list -r machine-a-.* | sort -nr
它给了我以下结果:
machine-a-9
machine-a-8
machine-a-72
machine-a-71
machine-a-70
我希望根据最后的数字按降序排列这些行
(显然sort -nr
不能按预期工作。)
答案 0 :(得分:2)
您只需要-t
中的-k
和sort
选项。
command list -r machine-a-.* | sort -t '-' -k 3 -nr
-t
是用于分隔字段的分隔符
通过赋予'-'
的值,sort
会将给定的文字视为:
Field 1 Field 2 Field 3
machine a 9
machine a 8
machine a 72
machine a 71
machine a 70
-k
指定将用于比较的字段
通过赋予值3
,sort
将通过比较Field 3
中的值对行进行排序。
即,将比较这些字符串:
9
8
72
71
70
-n
使sort
将字段视为数字而非字符串进行比较。
-r
使sort
按相反的顺序(降序)对行进行排序。
因此,通过按相反的顺序从Field 3
对数字进行排序,这将是输出:
machine-a-72
machine-a-71
machine-a-70
machine-a-9
machine-a-8
答案 1 :(得分:0)
以下是排序输入的示例:
$ cat 1.txt
machine-a-9
machine-a-8
machine-a-72
machine-a-71
machine-a-70
这是我们的简短程序:
$ cat 1.txt | ( IFS=-; while read A B C ; do echo $C $A-$B-$C; done ) | sort -rn | cut -d' ' -f 2
这是它的输出:
machine-a-72
machine-a-71
machine-a-70
machine-a-9
machine-a-8
说明:
$ cat 1.txt \ (put contents of file into pipe input)
| ( \ (group some commands)
IFS=-; (set field separator to "-" for read command)
while read A B C ; (read fields in 3 variables A B and C every line)
do echo $C $A-$B-$C; (create output with $C in the beggining)
done
) \ (end of group)
| sort -rn \ (reverse number sorting)
| cut -d' ' -f 2 (cut-off first unneeded anymore field)