根據第三列排序
我面臨著一個巨大的 4 列文件。我想根據第 3 列在標準輸出中顯示排序後的文件:
cat myFile | sort -u -k3
這足以執行這個技巧嗎?
sort -k 3,3 myFile
根據目前語言環境定義的排序順序,假設列由空格序列(POSIX/C 語言環境中的 ASCII SPC 和 TAB 字元)分隔,將顯示按第 3 列排序的文件。
請注意,列中包含前導空白(預設分隔符是從非空白到空白的過渡),這可能會在不忽略空格以進行比較的區域設置中產生差異,請使用
-b
忽略選項前導空格。請注意,它完全獨立於外殼程序(所有外殼程序都會以相同的方式解析該命令行,外殼程序通常沒有
sort
內置命令)。
-k 3
是對從第3列(包括前導空格)開始的行部分進行排序。在 C 語言環境中,因為空格和製表符排在所有可列印字元之前,這通常會給您相同的結果-k 3,3
(除了具有相同第三個欄位的行),
-u
如果有幾行相同的排序(即排序鍵排序相同(不一定與相等)相同),則僅保留其中一行。
cat
是連接的命令。你在這裡不需要它。如果列被其他東西分隔,您需要
-t
指定分隔符的選項。給定範例文件
a
$ cat a a c c c a b ca d a b c e a b c d
與
-u -k 3
:$ echo $LANG en_GB.UTF-8 $ sort -u -k 3 a a b ca d a c c c a b c d a b c e
第 2 行和第 3 行具有相同的第三列,但這裡的排序鍵是從第三列到行尾,因此
-u
保留兩者。␠ca␠d
sorts before␠c␠c
因為在我的語言環境的第一遍中忽略了空格,cad
sorts beforecc
。$ sort -u -k 3,3 a a b c d a b c e a b ca d
對於第 3 列為 的那些,僅保留以上一個
␠c
。請注意如何␠␠c
保留帶有(2 個前導空格)的那個。$ sort -k 3 a a b ca d a c c c a b c d a b c e $ sort -k 3,3 a a b c d a c c c a b c e a b ca d
看看
a b c d
和的順序是如何a c c c
顛倒的。在第一種情況下,因為␠c␠c
sorts before␠c␠d
,在第二種情況下,因為排序鍵相同 (␠c
),最後的比較方法是比較完整的行 putsa b c d
beforea c c c
。$ sort -b -k 3,3 a a b c d a b c e a c c c a b ca d
一旦我們忽略空格,前 3 行的排序鍵是相同的 (
c
),因此它們通過最後的比較排序。$ LC_ALL=C sort -k 3 a a b c e a c c c a b c d a b ca d $ LC_ALL=C sort -k 3,3 a a b c e a b c d a c c c a b ca d
在 C 語言環境中,先進行
␠␠c
排序,␠c
因為那裡只有一次傳遞,其中字元(然後是單個字節)根據其程式碼點值(其中空格的程式碼點低於c
)進行排序。