簡體   English   中英

在bash中排序

[英]Sorting in bash

我一直在嘗試在bash中的制表符分隔文件的每一列中獲取唯一值。 所以,我使用了以下命令。

cut -f <column_number> <filename> | sort | uniq -c

它工作正常,我可以在列中獲取唯一值,它的計數就像

105 Linux
55  MacOS
500 Windows

我想要做的不是按列值名稱(在本例中是操作系統名稱)進行排序,我想按計數對它們進行排序,並且可能在此輸出格式的第二列中有計數。 所以它必須看起來像:

Windows 500
MacOS   105
Linux   55

我該怎么做呢?

使用:

cut -f <col_num> <filename>
    | sort 
    | uniq -c
    | sort -r -k1 -n
    | awk '{print $2" "$1}'

sort -r -k1 -n以相反的順序排序,使用第一個字段作為數值。 awk只是顛倒了列的順序。 您可以測試添加的管道命令(具有更好的格式):

pax> echo '105 Linux
55  MacOS
500 Windows' | sort -r -k1 -n | awk '{printf "%-10s %5d\n",$2,$1}'
Windows      500
Linux        105
MacOS         55

礦:

cut -f <column_number> <filename> | sort | uniq -c | awk '{ print $2" "$1}' | sort

這將改變列順序(awk),然后只對輸出進行排序。

希望對你有幫助

使用基於Tagged RE的sed:

cut -f <column_number> <filename> | sort | uniq -c | sort -r -k1 -n | sed 's/\([0-9]*\)[ ]*\(.*\)/\2 \1/'

但是,不會以整潔的格式生成輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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