linux命令_sort

来源:https://www.cnblogs.com/ivanlee717/archive/2022/05/31/16329733.html
-Advertisement-
Play Games

sort Linux sort 命令用於將文本文件內容加以排序。 sort 可針對文本文件的內容,以行為單位來排序。sort可針對文本文件的內容,以行為單位來排序。sort命令將每一行作為一個單位進行比較,比較原則是從首字元向後,依次按ASCII碼值進行比較,最後將他們按一定的順序進行輸出。sort ...


sort

Linux sort 命令用於將文本文件內容加以排序。

sort 可針對文本文件的內容,以行為單位來排序。sort可針對文本文件的內容,以行為單位來排序。sort命令將每一行作為一個單位進行比較,比較原則是從首字元向後,依次按ASCII碼值進行比較,最後將他們按一定的順序進行輸出。sort命令經常可以與ls、cat等命令結合使用,將查詢到的結果按照我們要求進行排序。

語法

sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字元>][+<起始欄位>-<結束欄位>][--help][--verison][文件][-k field1[,field2]]

參數說明

選項:
排序類選項:
-b, --ignore-leading-blanks        忽略行首的空格

-d, --dictionary-order                 只處理空格,英文字母和數字

-f, --ignore-case                        小寫字母視為大寫字母

-g, --general-numeric-sort         按照數字大小比較

-i, --ignore-nonprinting              只考慮可列印的字元

-M, --month-sort                        按月份排序 (其他 < 'JAN' < ... < 'DEC')

-h, --human-numeric-sort          按可讀性更好的數字顯示方式排序(1K,2G)

-n, --numeric-sort                      按照字元串中的數字比較

-R, --random-sort                      隨機排序,但是將相同的鍵分組

--random-source=FILE             從 FILE 中獲得隨機位元組

-r, --reverse                               反向排序

--sort=WORD                            根據 WORD 排序,可選項是:-g|h|M|n|R|V

-V, --version-sort                        根據版本號數字排序

其他選項:
--batch-size=NMERGE                           一次最多合併 NMERGE 輸入,更多使用臨時文件

-c, --check, --check=diagnose-first         檢查是否排序

-C, --check=quiet, --check=silent            類似 -c, 不輸出報錯

--compress-program=PROG                   使用 PROG 壓縮,使用 PROG -d 解壓縮

--debug                                                註釋用於排序的行部分,並警告對 stderr 的可疑使用

--files0-from=F                                     從文件 F 中以空結尾的名稱指定的文件中讀取輸入

-k, --key=KEYDEF                               使用鍵排序,位置和類型由 KEYDEF 指定

-m, --merge                                          將排好序的文件合併

-o, --output=FILE                                  把排序結果輸出到 FILE

-s, --stable                                             穩定比較

-S, --buffer-size=SIZE                           使用 SIZE 作為主緩衝區大小

-t, --field-separator=SEP                       指定 SEP 為分隔符

-T, --temporary-directory=DIR               使用 DIR 作為臨時文件

--parallel=N                                           將同時運行的排序數設置為 N

-u, --unique                                            去重

-z, --zero-terminated                              行分隔符是空,不是換行

--help                                                      幫助文檔

--version                                                 版本信息

KEYDEF 是 F[.C][OPTS][,F[.C][OPTS]] 表示開始和停止位置,其中 F 是欄位編號,C 是欄位中的字元位置;兩者都是從 1 開始,停止位置預設為行尾。如果 -t 和 -b 均無效,則欄位中的字元從前一個空格的開頭開始計數。OPTS 是一個或多個單字母排序選項 [bdfgiMhnRrV],它覆蓋該鍵的全局排序選項。如果沒有給出鍵,則使用整行作為鍵。使用 --debug 來診斷不正確的密鑰使用。SIZE 可以加尾碼:% b K M G T P E Z Y

用法

  1. 預設按照字母排序

    [root@honey-master tmp] cat sort.txt 
    four
    three
    for 
    two
    two
    six
    [root@honey-master tmp] sort sort.txt 
    for 
    four
    six
    three
    two
    two
    
  2. 按照數字大小排序

    [root@honey-master tmp] cat sort.txt 
    717
    17
    71
    1
    1
    7
    1.5
    [root@honey-master tmp] sort sort.txt 
    1
    1
    1.5  浮點數也可以排序
    17
    7
    71
    717
    
  3. 去重後排序

    [root@honey-master tmp] sort -u  sort.txt 
    1
    1.5
    17
    7
    71
    717
    
  4. 去重後降序排序

    [root@honey-master tmp] sort -ur sort.txt 
    717
    71
    7
    17
    1.5
    1
    
  5. 文件夾大小排序

    [root@honey-master tmp] du -sh * | sort -hr
    96K	hsperfdata_root
    92K	chromium-ym2SRD
    88K	chromium-6OMI0k
    32K	systemd-private-5a76db78a7624ffe8c521b35a8f39be6-elasticsearch-0.service-MRQ20O
    4.0K	sort.txt
    0	pymp-yl2enfzo
    
  6. 使用du命令查看/usr/share下的文件排序,取前10個結果

    [root@honey-master tmp] du -s /usr/share/* | head
    732	/usr/share/aclocal
    156	/usr/share/aclocal-1.16
    18712	/usr/share/adobe
    360	/usr/share/alsa
    96	/usr/share/anaconda
    100	/usr/share/appdata
    56	/usr/share/applications
    380	/usr/share/asciidoc
    160	/usr/share/audit
    1336	/usr/share/augeas
    

    這裡的管head預設輸出前10行的數據,後面也可以加參數進行改變,比如

    image-20220531100554999

    使用sort排序之後:

    [root@honey-master tmp] du -s /usr/share/* | head | sort -nr
    18712	/usr/share/adobe
    1336	/usr/share/augeas
    732	/usr/share/aclocal
    380	/usr/share/asciidoc
    360	/usr/share/alsa
    160	/usr/share/audit
    156	/usr/share/aclocal-1.16
    100	/usr/share/appdata
    96	/usr/share/anaconda
    56	/usr/share/applications
    
  7. 使用 ll 列印 /opt 下邊的文件,取前 10 個結果,用sort 排序,用 k 選項指定第幾個欄位

    [root@honey-master opt] ll | sort -nk 1| head
    -r--r--r--.  1 root     root     166062080 May 30 22:06 ffmpeg-git-amd64-static.tar
    -rw-r--r--.  1 root     root      70159813 May 30 22:13 kafka_2.11-2.4.1.tgz
    -rw-r--r--.  1 root     root     630905856 May 30 22:09 asciicast2mp4.tar
    -rw-r--r--.  1 root     root     777374720 May 30 22:09 singlefile.tar.gz
    -rw-r--r--.  1 root     root     874286592 May 30 22:08 logstash.tar.gz
    -rwxr-xr-x.  1 root     root      56806961 May 30 22:12 cerebro-0.9.2.tgz
    drwx--x--x.  4 root     root            28 May 30 22:09 containerd
    drwxr-xr-x.  2 root     root            29 May 30 22:32 nta
    drwxr-xr-x.  2 root     root            62 May 30 22:46 msf
    drwxr-xr-x.  2 root     root            87 May 30 22:13 kafka.cli.test
    [root@honey-master opt] ll | sort -nk 2| head
    -r--r--r--.  1 root     root     166062080 May 30 22:06 ffmpeg-git-amd64-static.tar
    -rw-r--r--.  1 root     root      70159813 May 30 22:13 kafka_2.11-2.4.1.tgz
    -rw-r--r--.  1 root     root     630905856 May 30 22:09 asciicast2mp4.tar
    -rw-r--r--.  1 root     root     777374720 May 30 22:09 singlefile.tar.gz
    -rw-r--r--.  1 root     root     874286592 May 30 22:08 logstash.tar.gz
    -rwxr-xr-x.  1 root     root      56806961 May 30 22:12 cerebro-0.9.2.tgz
    drwxr-xr-x.  2 root     root            29 May 30 22:32 nta
    drwxr-xr-x.  2 root     root            62 May 30 22:46 msf
    drwxr-xr-x.  2 root     root            87 May 30 22:13 kafka.cli.test
    drwxr-xr-x.  2 root     root            88 May 30 22:46 pvp-strike
    [root@honey-master opt] ll | sort -nk 5| head
    total 2515244
    drwxr-xr-x.  3 root     root            17 May 30 22:07 python2.7.10-customized
    drwxr-xr-x.  3 root     root            17 May 30 22:07 python3.6.10-customized
    drwxr-xr-x.  3 root     root            17 Sep 18  2020 redis
    drwxr-xr-x.  3 root     root            18 May 30 22:08 honeypot-web
    drwx--x--x.  4 root     root            28 May 30 22:09 containerd
    drwxr-xr-x.  2 root     root            29 May 30 22:32 nta
    drwxr-xr-x.  5      501 games           57 Jun 18  2020 cerebro-0.9.2
    drwxr-xr-x.  2 root     root            62 May 30 22:46 msf
    drwxr-xr-x.  6 root     root            70 May 30 22:13 kafka-manager-1.3.3.23
    [root@honey-master opt] ll | sort -nk 7| head
    total 2515244
    drwxr-xr-x.  3 root     root            17 Sep 18  2020 redis
    drwxr-xr-x.  5      501 games           57 Jun 18  2020 cerebro-0.9.2
    drwxr-xr-x. 10 postgres postgres      4096 Feb 20  2014 zookeeper
    -r--r--r--.  1 root     root     166062080 May 30 22:06 ffmpeg-git-amd64-static.tar
    -rw-r--r--.  1 root     root      70159813 May 30 22:13 kafka_2.11-2.4.1.tgz
    -rw-r--r--.  1 root     root     630905856 May 30 22:09 asciicast2mp4.tar
    -rw-r--r--.  1 root     root     777374720 May 30 22:09 singlefile.tar.gz
    -rw-r--r--.  1 root     root     874286592 May 30 22:08 logstash.tar.gz
    -rwxr-xr-x.  1 root     root      56806961 May 30 22:12 cerebro-0.9.2.tgz
    
  8. 對 /etc/passwd 文件內容進行排序,設置分隔符為:,根據第1個欄位進行排序:

    [root@honey-master opt] cat /etc/passwd | sort -t  ":" -k 1 | head 
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    chrony:x:990:986::/var/lib/chrony:/sbin/nologin
    clamscan:x:986:981:Clamav scanner user:/:/sbin/nologin
    clamupdate:x:987:983:Clamav database update user:/var/lib/clamav:/sbin/nologin
    clevis:x:995:991:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
    cockpit-ws:x:993:989:User for cockpit web service:/nonexisting:/sbin/nologin
    cockpit-wsinstance:x:992:988:User for cockpit-ws instances:/nonexisting:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
  9. 將排序結果輸出到文件

    [root@honey-master opt] sort -t ":" -k 3 -nr /etc/passwd | head > /tmp/out.log
    [root@honey-master opt] cat /tmp/out.log 
    nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
    postgres:x:1000:1000::/home/postgres:/bin/bash
    systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
    polkitd:x:998:996:User for polkitd:/:/sbin/nologin
    unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
    clevis:x:995:991:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
    setroubleshoot:x:994:990::/var/lib/setroubleshoot:/sbin/nologin
    cockpit-ws:x:993:989:User for cockpit web service:/nonexisting:/sbin/nologin
    cockpit-wsinstance:x:992:988:User for cockpit-ws instances:/nonexisting:/sbin/nologin
    

    -o 參數:這個不支持部分排序操作,需要將所有排序之後寫入一個文件,也可以是源文件,不如 > 靈活

    [root@honey-master tmp] sort -t ":" -k 3 -nr passwd  -o passwd.txt
    [root@honey-master tmp] ls
    passwd.txt  passwd
    
  10. 多組輸出

    [root@honey-master tmp] cat test 
    Alice	98	02/20/2021
    Alice	97	01/31/2021
    Alice	92	03/01/2020
    Alice	95	07/11/2020
    Bob	99	12/23/2021
    Bob	91	02/25/2021
    Bob	98	01/30/2020
    Chris	98	02/19/2021
    Chris	98	02/05/2020
    Chris	94	02/08/2021
    Chris	92	02/10/2021
    Chris	93	02/13/2021
    

    指定先以第1個欄位排序,再以第2個欄位,且指定類型為數字:

    [root@honey-master tmp] sort -k 1 -k 2n test
    
    Alice	92	03/01/2020
    Alice	95	07/11/2020
    Alice	97	01/31/2021
    Alice	98	02/20/2021
    Bob	91	02/25/2021
    Bob	98	01/30/2020
    Bob	99	12/23/2021
    Chris	92	02/10/2021
    Chris	93	02/13/2021
    Chris	94	02/08/2021
    Chris	98	02/05/2020
    Chris	98	02/19/2021
    

    指定按順序以第3個欄位的第7個、第1個、第4個字元排序:是按照年份的第一位,月份的第一位,以及日期的第一位排序

    [root@honey-master tmp] sort -k 3.7 -k 3.1 -k 3.4 test
    
    Bob	98	01/30/2020
    Chris	98	02/05/2020
    Alice	92	03/01/2020
    Alice	95	07/11/2020
    Alice	97	01/31/2021
    Chris	94	02/08/2021
    Chris	92	02/10/2021
    Chris	93	02/13/2021
    Chris	98	02/19/2021
    Alice	98	02/20/2021
    Bob	91	02/25/2021
    Bob	99	12/23/2021
    
  11. -k M,N :M的意思是,從哪個域開始作為比較的依據;N截止到哪個域比較結束。M,N是一個(域的)範圍,如果這個M,N結合-u使用。那麼-u的比較範圍就是M域和N域之間的這段內容。如果數字N被省略,那麼-u比較的範圍就是從M域開始,一直到每行的最後一個域的最後一個字元。

    首先說-u的作用是整行都完全重合,才會去重,其他時候不會去重

    image-20220531105238407

    單列名字並不會去重

    如果配合上-k參數,-t參數預設為" ",且-k只有一個參數的時候,預設作用域是從第一個參數到末尾,所以後面的不重覆,這一行也不會去重

    但如果參數有兩個,比如-k 1,1,那麼作用域就只限於第一個部分,此時就可以去重了

    [root@honey-master tmp] sort -u -k 1 test 
    
    Alice	92	03/01/2020
    Alice	95	07/11/2020
    Alice	97	01/31/2021
    Alice	98	02/20/2021
    Bob	91	02/25/2021
    Bob	98	01/30/2020
    Bob	99	12/23/2021
    Chris	92	02/10/2021
    Chris	93	02/13/2021
    Chris	94	02/08/2021
    Chris	98	02/05/2020
    Chris	98	02/19/2021
    [root@honey-master tmp] sort -u -k 1,1 test 
    
    Alice	98	02/20/2021
    Bob	99	12/23/2021
    Chris	98	02/19/2021
    
    

本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16329733.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 校園失物招領網站 | lijinghai 項目介紹 📖 👉基於Springboot+vue+uni-app的校園失物招領平臺. 含平臺主體PC端、微信小程式和web後臺數據管理平臺. 失物招領信息一覽 信息發佈(支持圖片上傳) 項目技術棧 ⭐ PC端(WarmSearch-PC):Vue 2.0 ...
  • 最新博客更新見我的個人主頁: https://xzajyjs.cn 我們在使用Django構建網站時常需要對接第三方支付平臺的支付介面,這裡就以支付寶為例(其他平臺大同小異),使用支付寶開放平臺的沙箱環境進行實驗。 我們這裡使用一個第三方的AliPay Python SDK(github) 下麵看一 ...
  • 項目開發中遇到的一個問題,c++ 虐我千萬遍,我待 c++ 如初戀… ...
  • .NET5升級.NET6 Ant Design Pro V5 IdentityServer4實戰 前後端分離 oidc-client-ts .NET6部署Linux雲服務 功能變數名稱 ...
  • 一、簡介 單點登錄(SingleSignOn,SSO) 指的是在多個應用系統中,只需登錄一次,就可以訪問其他相互信任的應用系統。 JWT Json Web Token,這裡不詳細描述,簡單說是一種認證機制。 OAuth2.0 OAuth2.0是一個認證流程,一共有四種方式,這裡用的是最常用的授權碼方 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、Docker介紹 ​ 我們知道,一臺物理機需要運行多個程式,然而每個程式又需要各自不同的一堆依賴,所有程式全裝上的話,整個物理機系統會變得混亂不堪,同時也容易出問題,使得我們後續維護比較困難。而如果利用docker,就可以直接下載一個鏡像,投 ...
  • 問題 之前一直有夜晚睡覺前電腦💻關機的習慣,主要是想著電腦也跟人一樣♨️要休息😂。然後最近想著自己 Mac 乾脆每天睡眠💤算了,省得每天開關機麻煩,所以就最近這段時間每次夜晚睡覺前主動去點了電腦的 「Sleep」電源選項。然而事情並不簡單,由於我有看日誌的習慣,所以每天早起的時候看了一下電源歷 ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 在SPI匯流排通信的基礎上,使用單片機控制DAC晶元MCP4921以1秒為周期輸出正弦波,正弦波的波動範圍為0-3 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...