Unix

為什麼我的 awk 子命令失敗?

  • May 29, 2016

當我跑

df -hl | grep '/dev/disk1' | awk '{sub(/%/, \"\");print $5}'

我收到以下錯誤:

awk: syntax error at source line 1
context is
   {sub(/%/, >>>  \ <<< "\");}
awk: illegal statement at source line 1

我似乎在 awk sub 上找不到任何文件。

df -hl | grep '/dev/disk1'

返回

/dev/disk1                         112Gi   94Gi   18Gi    85% 24672655 4649071   84%   /

據我了解,它應該返回已用磁碟空間的百分比。

您只需要刪除這對反斜杠:

df -hl | grep '/dev/disk1' | awk '{sub(/%/, "");print $5}'

awksub函式有據可查,可以將作為第一個參數傳遞的模式的第一次出現替換為作為第二個參數傳遞的字元串。

這裡的模式是百分號,替換字元串是一個空字元串。正如您在問題中所寫的那樣,第二個參數是無效字元串,因此會awk抱怨並退出。更正的awk語句是刪除%其輸入中的出現並顯示第五個欄位。

請注意,grep這裡的命令是多餘的,因為awk能夠單獨進行過濾,所以命令可以簡化為:

df -hl | awk '/\/dev\/disk1/ {sub(/%/, "");print $5}'

引用自:https://serverfault.com/questions/779618