[英]how to sort this in bash
您好,我有一個包含以下行的文件:
apple
12
orange
4
rice
16
如何使用bash按數字排序? 假設每個數字是上述 object 的價格。
我希望它們的格式如下:
12 apple
4 orange
16 rice
或者
apple 12
orange 4
rice 16
謝謝
使用paste
+ sort
解決方案 ,使每個產品按其價格排序 :
$ paste - - < file|sort -k 2nr
rice 16
apple 12
orange 4
說明
來自paste
人 :
將由每個FILE的順序對應的行(由TAB分隔)組成的行寫入標准輸出。 如果沒有FILE,或者FILE是 - ,則讀取標准輸入。
paste
獲取來自stdin
( 你的 <file
)的流,並說明每一行都屬於 -
代表的虛構存檔,所以我們得到兩列- -
sort
使用標志-k 2nr
以反向數字順序獲取按第二列排序的paste
輸出。
你可以使用awk:
awk '!(NR%2){printf "%s %s\n" ,$0 ,p}{p=$0}' inputfile
(略微改編自這個答案 )
如果你想在之后對輸出進行排序,你可以使用sort
(非常邏輯):
awk '!(NR%2){printf "%s %s\n" ,$0 ,p}{p=$0}' inputfile | sort -n
這會給:
4 orange
12 apple
16 rice
使用awk
另一個解決方案
$ awk '/[0-9]+/{print prev, $0; next} {prev=$0}' input
apple 12
orange 4
rice 16
while read -r line1 && read -r line2;do
printf '%s %s\n' "$line1" "$line2"
done < input_file
如果您希望按價格對行進行排序,請將結果通過管道sort -k2
:
while read -r line1 && read -r line2;do
printf '%s %s\n' "$line1" "$line2"
done < input_file | sort -k2
您可以使用paste
和awk
$ paste - - <lines.txt | awk '{printf("%s %s\n",$2,$1)}'
12 apple
4 orange
16 rice
一個基於awk
的解決方案,無需外部paste / sort
,使用regex
,計算任何東西的modulo %
或awk/bash
循環
{m,g}awk '(_*=--_)? (__ = $:_)<__ : ($++NF = __)_' FS='\n'
12 apple
4 orange
16 rice
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.