2016-11-22 86 views
1

我有我試圖南瓜的大小進行排序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有很大的困難的工作正常。任何人都可以幫我按照南瓜大小對列表進行排序,而無需修改列表結構?

回答

3

表標題需要特別考慮,因爲「排序」它們會將它們移動到一些隨機行。所以我們使用兩個步驟: 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 
3

的關鍵點是選項-ksort。您可以使用man sort來查看它的工作原理。您問題的解決方法如下:

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

你可以簡單地通過sed命令刪除

name |size 
========== 

。然後可以使用sort命令對剩下的內容進行排序。

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

這裏,sed '1,2d'將去除頭兩行。

然後sort將使用選項-t標記字符'|'上的數據。

由於您想根據恰好是第二個標記的大小進行排序,因此標記「size」可由-k 2選項sort指定。

最後,考慮到「大小」爲數字,所以這可以通過sort的選項-n來指定。

+0

這種升序,而不是降序。 – Jens

+0

@Jens:由於OP沒有提到排序順序,因此將其保留爲默認升序。然而'sort'命令中可以提供'-r'(反向或者降序)選項。 – sameerkn

1

可以在外殼做到這一點:

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

讀取和打印頭2頭線,然後進行排序的其餘部分。