Text-Processing
使用 sed 和多個 awk 呼叫簡化單行程序
我想簡化這一行,僅當分區的使用率大於或等於 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