内联字符的unix'leed'命令

时间:2016-11-22 09:02:45

标签: sorting unix command-line-interface

我有一个南瓜的.txt文件,我试图按南瓜的大小排序:

name |size
==========
Joe  |5
Mary |10
Bill |2
Jill |1
Adam |20
Mar  |5
Roe  |10
Mir  |3
Foo  |9
Bar  |12
Baz  |0

目前,我很难让sort正常工作。任何人都可以帮助我按南瓜大小排序我的列表而不修改列表结构?

4 个答案:

答案 0 :(得分:3)

表格标题需要特别考虑,因为"排序"他们会将它们移动到一些随机线。所以我们使用两个步骤: a)输出表格标题。 b)对其余数字进行排序(-n),反向  order(-r),带字段分隔符|( - t),从字段2开始(-k)

$ awk 'NR<=2' in; awk 'NR>2' in | sort -t '|' -nr -k 2
name |size
==========
Adam |20
Bar  |12
Roe  |10
Mary |10
Foo  |9
Mar  |5
Joe  |5
Mir  |3
Bill |2
Jill |1
Baz  |0

答案 1 :(得分:3)

关键点是-k的选项sort。您可以使用man sort查看其工作原理。您的问题的解决方案如下:

sed -n '3,$p' YOUR_FILENAME| sort -hrt '|' -k 2

答案 2 :(得分:1)

您只需删除

即可
name |size
==========

使用sed命令。然后可以使用sort命令对剩下的内容进行排序。

sed '1,2d' txt | sort -t "|" -k 2 -n

此处,sed '1,2d'将删除前两行。

然后sort会使用选项'|'对字符-t上的数据进行标记。

由于您希望根据恰好是第二个令牌的大小进行排序,因此令牌&#34; size&#34;可以通过-k 2的{​​{1}}选项指定。

最后,考虑&#34;尺寸&#34;作为数字,因此可以通过sort的选项-n指定。

答案 3 :(得分:1)

您可以在shell中执行此操作:

{ read; echo "$REPLY"; read; echo "$REPLY"; sort -t'|' -k2n; } < pumpkins.txt

读取并打印前2个标题行,然后对其余标题进行排序。