Text-Processing

使用 sed 和多個 awk 呼叫簡化單行程序

  • January 11, 2017

我想簡化這一行,僅當分區的使用率大於或等於 60% 時才會列印。我還想在使用率值上附加一個百分號。

df -h | sed 's/%//g' | awk '{print $6,$5 }' | awk '{ if($2 >=60 ) print}' | column -t

我使用的是 BSD 變體,並且沒有安裝常用的 GNU 工具。

既然這被標記awk了,讓我們繼續努力。第一個awk只是用於將第 6 列和第 5 列移動到第 1 列和第 2 列,所以我們可以擺脫它,只在第二個 awk 中使用 6 和 5。

df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 }' | column -t

我們也可以加上百分號

df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 "%"}' | column -t

我們可以刪除sed並在 awk 中執行此操作

df -h | awk '{gsub(/%/,""); if($5 >=60) print $6, $5 "%"}' | column -t

我們可以column -t通過讓 awk 將值儲存在一個數組中來刪除 ,然後在一個END語句循環中遍歷該數組以找出最長的名稱並相應地列印,但我認為這不再是一個one liner

使用簡單的 grep 會更容易一些。只有兩列不會交換。

$ df -h|egrep -o "(100|[6-9].)% /.*$"
65% /
93% /home

引用自:https://unix.stackexchange.com/questions/333586