您好,登錄后才能下訂單哦!
awk的 命令是一種處理或分析文本文件的強大方法,特別是按行和列組織的數據文件。可以從 命令行運行簡單的awk命令。更復雜的任務應該作為awk程序(所謂的awk 腳本)寫入文件。 |
awk命令的基本格式如下:
awk 'pattern {action}' input-file > output-file
這意味著:取輸入文件的每一行; 如果該行包含該模式,則將該操作應用于該行并將結果行寫入輸出文件。 如果省略該模式,則該操作將應用于所有行。 例如:
linuxidc@Ubuntu:~/linuxidc.com$ awk '{ print $5 }' linuxidc.txt > linuxmi.txt
該語句獲取每行第5列的元素,并將其作為一行寫入輸出文件“output.txt”中。 變量'$4'指的是第四列。 類似地,您可以使用$1,$2,$3等訪問第一列,第二列和第三列。默認情況下,假定列由空格或制表符(所謂的空格)分隔。 因此,如果輸入文件“linuxidc.txt”包含以下行:
然后該命令將以下行寫入輸出文件“linuxmi.txt”:
linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt 599, 761, 880, 198, 582, 370, 571, 673, 585,
如果列分隔符不是空格或制表符(例如逗號),則可以在awk語句中指定,如下所示:
linuxidc@ubuntu:~/linuxidc.com$ awk -F, '{ print $3 }' linuxidc.txt > linuxmi.txt
如果認為列被逗號分隔,這將從每行的第3列中選擇元素。 因此,在這種情況下,輸出將是:
linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt Title 599 Title 761 Title 880 Title 198 Title 582 Title 370 Title 571 Title 673 Title 585
大括號內的語句列表('{','}')稱為塊。 如果將條件表達式放在塊前面,則只有條件為真時才會執行塊內的語句。
awk '$7=="\$7.30" { print $3 }' linuxidc.txt
在這種情況下,條件是$7=="\$7.30",這意味著第7列的元素等于$7.30。 美元符號前面的反斜杠用于阻止系統將$7解釋為變量,而是從字面上理解美元符號。
因此,這個awk語句打印出每行第3列的元素,第7列的“$7.30”。
您還可以使用正則表達式作為條件。 例如:
linuxidc@ubuntu:~/linuxidc.com$ awk '$7=="\$7.30" { print $3 }' linuxidc.txt
兩個斜杠('/')之間的字符串是正則表達式。 在這種情況下,它只是字符串“30”。 這意味著如果一行包含字符串“30”,系統將在該行的第3列打印出該元素。 上例中的輸出將是:
linuxidc@ubuntu:~/linuxidc.com$ awk '/30/ { print $3 }' linuxidc.txt com, Gaga, Presley,
如果表元素是數字,awk可以在它們上運行計算,如下例所示:
linuxidc@ubuntu:~/linuxidc.com$ awk '{ print ($2 * $3) + $7 }' linuxidc.com.txt
除了訪問當前行元素($1,$2等)的變量之外,還有變量$0表示完整行(行),變量NF表示字段數。
您還可以在此示例中定義新變量:
linuxidc@ubuntu:~/linuxidc.com$ awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }' linuxidc.com.txt
這將計算并打印每行所有元素的總和。
awk語句經常與sed命令結合使用。
原文來自: https://www.linuxprobe.com/awk-command-script.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。