簡體   English   中英

如何在 bash 中對此進行排序

[英]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

您可以使用pasteawk

$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM