在 Linux 中做什么awk -F: '!($3 < 512 && $4 < 30)' /etc/passwd?我只發現 awk 是一種腳本語言,但無法理解這一切。
uj5u.com熱心網友回復:
世界awk是基于模式的condition{action},這適用于輸入檔案的每一個輸入記錄/輸入行。
如果{action}缺少則執行默認操作 =print這實際上意味著print $0
如果缺少則使用(condition)默認條件true
-F:將欄位分隔符調整為:awk[[space]]的默認欄位分隔符。awk 中的欄位分隔符幾乎可以是任何東西,包括正則運算式和邏輯(即或)運算式。
$3,輸入行的第 3 和第 4 欄位(在您的代碼中$4由分隔):
($3 < 512 && $4 < 30)是一個條件,&&是 AND 運算子。
!前面的條件只是一個NOT運算子,用于反轉邏輯(condition)
awk 更有趣的選項:
$0 : 是從檔案中讀取的整個輸入行,未拆分
$NF: 是輸入行的最后一個欄位
NF : 是欄位數
RS : 輸入記錄/行分隔符可以調整為不為\n(awk 的默認值)
ORS: 輸出記錄分隔符 (默認awk 是\n)
嘗試:
echo "one two three" | awk '{print $2}'
echo "one two three" |awk '1' RS=" " ORS="\n"
更多的資訊awk可以在官方 awk 檔案中或在官方檔案中man awk 找到,即https://www.gnu.org/software/gawk/manual/gawk.html forinfo awkgnu awk - gawk
uj5u.com熱心網友回復:
這是簡寫
awk -F: '!($3 < 512 && $4 < 30) { print; }' /etc/passwd
并表示“顯示所有非( -:分隔欄位#3小于512且欄位#4小于30)的行”/etc/passwd
借助man 5 passwdDeMorgan 定律,這對應于“顯示用戶 ID 大于 512 或組 ID 大于 30 的用戶帳戶串列”。
這種邏輯可能只顯示系統上的人類用戶,因為一個常見的約定是為他們分配比非人類系統用戶(如 apache 和 mysql)更高的 UID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465346.html
上一篇:'hdfsdfs-cp'是否使用/tmp作為其實作的一部分
下一篇:以最小X位元組讀取?
