2023年11月2日 星期四

Bash一行文:文本第一行不參與sort排序

在處理文本資料,尤其是像csv格式的表格,第一列通常是表格每個欄位的標題(header),在排序的時候通常不會處理,但又會需要印出來看。例如說:

  1. df -Th
  2. df -Th | awk 'NR<2{print $0;next}{print $0| "sort"}'
  3. df -Th | { sed -u 1q; sort; }
  4. df -Th | (sed -u 1q; sort)

第1個指令是印出目前系統上的掛載點與使用空間,2, 3, 4三個指令結果一樣,都是將掛載點依照名稱排序,但第一行的欄位不參與排序。每個指令的詳細說明如下:

  1. df -Th:參數T代表mount type,小寫h代表人讀得懂的格式
  2. awk 'NR<2{print $0;next}{print $0| "sort"}'
    使用awk指令,在number of row (NR)小於2也就是第1行的時候印出來,剩下的內容則是印出後pipe到sort指令來做排序。awk的這個寫法比起後面的sed要容易懂
  3. { sed -u 1q; sort; }
    使用sed指令,-u參數代表unbuffered,後面的結果直接塞給sort指令。1q則是代表印出第一行以後就跳開,讓剩下的東西給sort指令去處理
  4. (sed -u 1q; sort)
    跟範例3很像,但是使用小括號會產生subshell,比較吃資源


最後整理一下習慣看掛載點的空間指令,根據不同的需求排序:

  • df -Th | grep -v "/run/user" | { sed -u 1q; sort; }
  • df -Th | grep -v "/run/user" | { sed -u 1q; sort -k2; }
  • df -Th | grep -v "/run/user" | { sed -u 1q; sort -k7; }
可以把長長的指令用alias轉成一個短指令dfh
  • alias dfh='df -Th | grep -v "/run/user" | { sed -u 1q; sort -k7; }'
  • dfh


參考資料

_EOF_

a birds eye view overlooking an ancient fantasy city surrounded by mountains and trees of greens and browns, rivers and lakes by Jordan Grimmer, Asher Brown Durand and Ryan Dening, 8k, artstation, beautiful color pallette
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4137951745, Size: 512x256, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly, Version: v1.6.0-2-g4afaaf8a
Time taken: 4 min. 3.6 sec.
A: 3.36 GB, R: 3.68 GB, Sys: 2.0/2 GB (100.0%)

沒有留言:

張貼留言