linux 中 sort -k選項

小鲨鱼2018發表於2024-11-05

001、簡單測試

[root@PC1 test1]# ls
a.txt
[root@PC1 test1]# cat a.txt                  ## 測試資料
01 02 03b 34
05 86 87a 98
09 10 41b 12
13 54 15i 16
17 18 19a 20
[root@PC1 test1]# sort -k 4 a.txt            ## 按照第四列進行排序
09 10 41b 12
13 54 15i 16
17 18 19a 20
01 02 03b 34
05 86 87a 98
[root@PC1 test1]# sort -k 3 a.txt            ## 按照第三列繼續排序
01 02 03b 34
13 54 15i 16
17 18 19a 20
09 10 41b 12
05 86 87a 98

002、-k域的欄位

[root@PC1 test1]# ls
a.txt
[root@PC1 test1]# cat a.txt                          ## 測試資料
01 02 03b 34
05 86 87a 98
09 10 41b 12
13 54 15i 16
17 18 19a 20
[root@PC1 test1]# sort -k 3.3,3.3 a.txt             ## 指定第三個域的第三個字元排序,無效
09 10 41b 12
01 02 03b 34
13 54 15i 16
05 86 87a 98
17 18 19a 20
[root@PC1 test1]# sort -t " " -k 3.3,3.3 a.txt      ## 使用-t選項指定域的分隔符,生效, 為什麼?
05 86 87a 98
17 18 19a 20
01 02 03b 34
09 10 41b 12
13 54 15i 16

003、

[root@PC1 test1]# ls
a.txt
[root@PC1 test1]# cat a.txt                        ## 測試資料
01 02 03b 34
05 86 87a 98
09 10 41b 12
13 54 15i 16
17 18 19a 20
[root@PC1 test1]# sort -k 2.2 a.txt                ## 依據第二個欄位的第二個字元排序
01 02 03b 34
09 10 41b 12
17 18 19a 20
13 54 15i 16
05 86 87a 98
[root@PC1 test1]# sort -t " " -k 2.2 a.txt         ## 使用-t選項指定空格為分隔符生效
09 10 41b 12
01 02 03b 34
13 54 15i 16
05 86 87a 98
17 18 19a 20

004、

[root@PC1 test1]# ls
a.txt
[root@PC1 test1]# cat a.txt               ## 測試資料
01      02      03b     34
05      86      87a     98
09      10      41b     12
13      54      15i     16
17      18      19a     20
[root@PC1 test1]# sort -k 2.2 a.txt       ## 無效
01      02      03b     34
09      10      41b     12
17      18      19a     20
13      54      15i     16
05      86      87a     98
[root@PC1 test1]# sort -t "\t" -k 2.2 a.txt        ## 指定製表符分隔符,無效
sort: multi-character tab ‘\\t’
[root@PC1 test1]# sort -t $'\t' -k 2.2 a.txt       ## 指定製表符分隔符
09      10      41b     12
01      02      03b     34
13      54      15i     16
05      86      87a     98
17      18      19a     20

005、

[root@PC1 test1]# ls
a.txt
[root@PC1 test1]# cat a.txt                             ## 測試資料
01      02      03b     34
05      86      87a     98
09      10      41b     12
13      54      15i     16
17      18      19a     20
[root@PC1 test1]# sort -t $'\t' -k 2.2 a.txt           ## 按照第二個欄位的第二個字元開始排序
09      10      41b     12
01      02      03b     34
13      54      15i     16
05      86      87a     98
17      18      19a     20
[root@PC1 test1]# sort -t $'\t' -kr 2.2 a.txt                   ## 逆向排序指定失敗
sort: invalid number at field start: invalid count at start of ‘r’
[root@PC1 test1]# sort -t $'\t' -k 2.2r a.txt                   ## 逆向排序
17      18      19a     20
05      86      87a     98
13      54      15i     16
01      02      03b     34
09      10      41b     12

相關文章