我有一个南瓜的.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
正常工作。任何人都可以帮助我按南瓜大小排序我的列表而不修改列表结构?
答案 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个标题行,然后对其余标题进行排序。