shell學習(5)- sort
阿新 • • 發佈:2018-12-22
Linux sort命令用於將文字檔案內容加以排序。
sort可針對文字檔案的內容,以行為單位來排序。
引數如下:
-b 忽略每行前面開始出的空格字元。 -c 檢查檔案是否已經按照順序排序。 -d 排序時,處理英文字母、數字及空格字元外,忽略其他的字元。 -f 排序時,將小寫字母視為大寫字母。 -i 排序時,除了040至176之間的ASCII字元外,忽略其他的字元。 -m 將幾個排序好的檔案進行合併。 -M 將前面3個字母依照月份的縮寫進行排序。 -n 依照數值的大小排序。 -o<輸出檔案> 將排序後的結果存入指定的檔案。 -r 以相反的順序來排序。 -k 指定以哪一列來排序。
-u 去重。-t<分隔字元> 指定排序時所用的欄位分隔字元。 +<起始欄位>-<結束欄位> 以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。 --help 顯示幫助。 --version 顯示版本資訊。
1.sort直接用就可以對檔案進行排序
準備測試檔案 [[email protected] ~]$ cat sorttest.txt hello java php world betty php [[email protected] ~]$ sort sorttest.txt betty hello java php php world
2.sort -u的選項是去重,在輸出行中去除重複行
[[email protected] ~]$ sort -u sorttest.txt betty hello java php world
3.sort -n 選項是按照數值大小排序,這樣就不會出現10出現在2之前了
準備個檔案 [[email protected] ~]$ cat num.txt 8 9 1 2 10 20 如果直接排序,結果如下 [[email protected] ~]$ sort num.txt 1 10 2 20 8 9 要想按照數值大小排序,需要加-n選項 [[email protected] ~]$ sort -n num.txt 1 2 8 9 10 20
4.sort -o 選項把結果輸出到指定檔案中,用重定向命令也是可以的
[[email protected] ~]$ sort -n -o test num.txt [[email protected] ~]$ cat test 1 2 8 9 10 20 或者直接如下 [[email protected] ~]$ sort -n num.txt > test [[email protected] ~]$ cat test 1 2 8 9 10 20
5.sort的-t選項指定分隔符
這個檔案有三列,列與列之間用“-”隔開了,第一列表示年,第二列表示月,第三列表示日。那麼我想以月來排序,也就是以第二列來排序,如何利用sort實現?幸好,sort提供了-t選項,後面可以設定間隔符。指定了間隔符之後,就可以用-k來指定列數了。
準備檔案 [[email protected] ~]$ cat date 2018-12-22 2016-11-11 2017-04-11 2019-08-07 如果直接排序的話,結果如下 [[email protected] ~]$ sort date 2016-11-11 2017-04-11 2018-12-22 2019-08-07 如果以第二列月份排序的話,如下 [[email protected] ~]$ sort -n -k2 -t'-' date 2017-04-11 2019-08-07 2016-11-11 2018-12-22
6.sort -k選項是指定以哪一列來排序
準備測試檔案如下 [[email protected] ~]$ cat company facebook 50 5000 alibaba 100 3000 tengxun 80 4000 baidu 150 2000 google 200 1000 如果直接排序,是以第一列的字母排序 [[email protected] ~]$ sort company alibaba 100 3000 baidu 150 2000 facebook 50 5000 google 200 1000 tengxun 80 4000 第一列排序還可以指定第一列 [[email protected] ~]$ sort -k1 company alibaba 100 3000 baidu 150 2000 facebook 50 5000 google 200 1000 tengxun 80 4000 [[email protected] ~]$ sort -k1 -t' ' company alibaba 100 3000 baidu 150 2000 facebook 50 5000 google 200 1000 tengxun 80 4000 如果以第二列數值大小排序 [[email protected] ~]$ sort -k2n -t' ' company facebook 50 5000 tengxun 80 4000 alibaba 100 3000 baidu 150 2000 google 200 1000
改下檔案,如果第二列相同,按第三列大小排序,如何操作?
[[email protected] ~]$ cat company facebook 50 5000 alibaba 50 3000 tengxun 80 4000 baidu 150 2000 google 200 1000 [[email protected] ~]$ sort -k2n -t' ' -k3n company alibaba 50 3000 facebook 50 5000 tengxun 80 4000 baidu 150 2000 google 200 1000
如果第二列相同,第三列降序排序,如何操作呢?
[[email protected] ~]$ sort -k2n -t' ' -k3nr company facebook 50 5000 alibaba 50 3000 tengxun 80 4000 baidu 150 2000 google 200 1000
如果-k 和 -u 聯合使用,有什麼效果呢?
[[email protected] ~]$ sort -n -k2 company alibaba 50 3000 facebook 50 5000 tengxun 80 4000 baidu 150 2000 google 200 1000 [[email protected] ~]$ sort -n -k2 -u company facebook 50 5000 tengxun 80 4000 baidu 150 2000 google 200 1000
發現第二列相同的alibaba刪除掉了
7.sort -M選項,按月份的前三個縮寫字母來排序
[[email protected] ~]$ cat month DEC JAN NOV AUG MAY [[email protected] ~]$ sort -M month JAN MAY AUG NOV DEC
8.sort -r選項是逆序排列
[[email protected] ~]$ cat sorttest.txt hello java php world betty php [[email protected] ~]$ sort -r sorttest.txt world php php java hello betty