我有我試圖南瓜的大小進行排序pumpkinsizes的.txt文件:UNIX「排序」內聯字符命令
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
有很大的困難的工作正常。任何人都可以幫我按照南瓜大小對列表進行排序,而無需修改列表結構?
我有我試圖南瓜的大小進行排序pumpkinsizes的.txt文件:UNIX「排序」內聯字符命令
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
有很大的困難的工作正常。任何人都可以幫我按照南瓜大小對列表進行排序,而無需修改列表結構?
表標題需要特別考慮,因爲「排序」它們會將它們移動到一些隨機行。所以我們使用兩個步驟: a)輸出表格標題。 B)進行排序,其餘數值(-n),反向 順序(-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
的關鍵點是選項-k
的sort
。您可以使用man sort
來查看它的工作原理。您問題的解決方法如下:
sed -n '3,$p' YOUR_FILENAME| sort -hrt '|' -k 2
你可以簡單地通過sed
命令刪除
name |size
==========
。然後可以使用sort
命令對剩下的內容進行排序。
sed '1,2d' txt | sort -t "|" -k 2 -n
這裏,sed '1,2d'
將去除頭兩行。
然後sort
將使用選項-t
標記字符'|'
上的數據。
由於您想根據恰好是第二個標記的大小進行排序,因此標記「size」可由-k 2
選項sort
指定。
最後,考慮到「大小」爲數字,所以這可以通過sort
的選項-n
來指定。
可以在外殼做到這一點:
{ read; echo "$REPLY"; read; echo "$REPLY"; sort -t'|' -k2n; } < pumpkins.txt
讀取和打印頭2頭線,然後進行排序的其餘部分。
這種升序,而不是降序。 – Jens
@Jens:由於OP沒有提到排序順序,因此將其保留爲默認升序。然而'sort'命令中可以提供'-r'(反向或者降序)選項。 – sameerkn