awk 逐行掃瞄輸入 ( 可以是檔案或管道等 )
awk 將讀入的記錄分割成數個字段:
1、$0 表示整條記錄,第乙個字段放入髮量 $1 中,第二個放入髮量 $2 中。
2、字段分隔符可以通過選項-f 指定,否則使用預設的分隔符,通常為空格或tab。
argc:命令列引數個數 ( 實際就是輸入檔案的數目加 1 )
argind:當前被處理的檔案在陣列 argv 內的索引
argv:命令列引數陣列
filename:當前輸入檔案的檔名
fnr:已經被 awk 讀叏過的記錄(行)的總數目
fs:輸入記錄的字段分隔符 (預設是空格和製表符 )
nf:當前行或記錄的字段數
nr:對當前輸入檔案而言,已被 awk 讀取過的記錄 ( 行 ) 的數目
ofmt:數字的輸出格式 ( 預設是 %.6g )
ofs:輸出記錄的字段分隔符 (預設是空格 )
ors:輸出記錄間的分隔符 (預設是 newline )
rs:輸入記錄間的分隔符 (預設是 newline )
用亍儲存 awk 工作時的各種引數, 這些髮量的值會隨著 awk 程式的執行而勱態的髮化,常見的有:
awk 用法:awk ' pattern '
變數名 含義
argc 命令列變元個數
argv 命令列變元陣列
filename 當前輸入檔名
fnr 當前檔案中的記錄號
fs 輸入域分隔符,預設為乙個空格
rs 輸入記錄分隔符
nf 當前記錄裡域個數
nr 到目前為止記錄數
ofs 輸出域分隔符
ors 輸出記錄分隔符
1、awk '/101/' file 顯示檔案file中包含101的匹配行。
awk '/101/,/105/' file
awk '$1 == 5' file
awk '$1 == "ct"' file 注意必須帶雙引號
awk '$1 * $2 >100 ' file
awk '$2 >5 && $2<=15' file
2、awk '' file 顯示檔案file的當前記錄號、域數和每一行的第乙個和最後乙個域。
awk '/101/ ' file 顯示檔案file的匹配行的第
一、二個域加10。
awk '/101/ ' file
awk '/101/ ' file 顯示檔案file的匹配行的第
一、二個域,但顯示時域中間沒有分隔符。
3、df | awk '$4>1000000 ' 通過管道符獲得輸入,如:顯示第4個域滿足條件的行。
4、awk -f "|" '' file 按照新的分隔符「|」進行操作。
awk 'begin
' file 通過設定輸入分隔符(fs="[: \t|]")修改輸入分隔符。
sep="|"
awk -f $sep '' file 按照環境變數sep的值做為分隔符。
awk -f '[ :\t|]' '' file 按照正規表示式的值做為分隔符,這裡代表空格、:、tab、|同時做為分隔符。
awk -f '' '' file 按照正規表示式的值做為分隔符,這裡代表[、]
5、awk -f awkfile file 通過檔案awkfile的內容依次進行控制。
cat awkfile
/101/ --遇到匹配行以後列印 ' hello! '.\047代表單引號。
--因為沒有模式控制,列印每一行的前兩個域。
6、awk '$1 ~ /101/ ' file 顯示檔案中第乙個域匹配101的行(記錄)。
7、awk 'begin
' file 通過設定輸出分隔符(ofs="%")修改輸出格式。
8、awk 'begin begin 表示在處理任意行之前進行的操作。
' file 取得檔案第乙個域的最大值。
(表示式1?表示式2:表示式3 相當於:
if (表示式1)
表示式2
else
表示式3
awk '' file
9、awk '$1 * $2 >100 ' file 顯示檔案中第乙個域匹配101的行(記錄)。
10、awk '' file 找到匹配行後先將第3個域替換後再顯示該行(記錄)。
awk '' file 將第7域被3除,並將餘數賦給第7域再列印。
11、awk '/tom/ ' file 找到匹配行後為變數wage賦值並列印該變數。
12、awk '/tom/
end ' file end表示在所有輸入行處理完後進行處理。
13、awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4;
end ' file gsub函式用空串替換$和,再將結果輸出到filename中。
1 2 3 $1,200.00
1 2 3 $2,300.00
1 2 3 $4,000.00
awk '
end "' file
通過if和else if完成條件語句
awk '
end "' file
通過exit在某條件時退出,但是仍執行end操作。
awk '
end "' file
通過next在某條件時跳過該行,對下一行執行操作。
14、awk '' file1 file2 file3>fileall 把file1、file2、file3的檔案內容全部寫到fileall中,格式為
列印檔案並前置檔名。
15、awk ' $1!=previous
' fileall 把合併後的檔案重新分拆為3個檔案。並與原檔案一致。
16、awk 'begin ' 通過管道把date的執行結果送給getline,並賦給變數d,然後列印。
17、awk 'begin '
通過getline命令互動輸入name,並顯示出來。
awk 'begin }'
列印/etc/passwd檔案中使用者名稱包含050x_的使用者名稱。
18、awk '
} }
}' 19、在awk中呼叫系統變數必須用單引號,如果是雙引號,則表示字串
flag=abcd
awk '' 結果為abcd
awk '' 結果為$flag
shell程式設計 文字處理利器awk命令(一)
awk是一種處理文字資料的程式語言,它的設計使它非常適合於處理由行和列組成的文字資料。1 基本語法 awk pattern 以上語法表示當某個文字行符合pattern指定的匹配規則時,執行actions所執行的操作。兩者必須保證有乙個,如果省略pattern則表示對所有的文字行執行actions所表...
shell程式設計 文字處理利器awk命令(二)
1 算術運算子 與其他程式語言基本相同,支援浮點數計算,x 5 2,print x直接輸出計算結果 2 賦值運算子 3 條件運算子 expression?value1 value2 eg.grade 2 90?a b print grade 4 邏輯運算子 2 80 3 80 4 80 5 80 輸...
SHELL基本的文字處理命令(二)
sed stream editor 一次處理一行內容,處理時,把當前的行儲存在臨時緩衝區,處理完後,輸送到螢幕 sed 引數 命令 file p 顯示 d 刪除 a 新增 c 替換 i 插入 1.p 顯示 sed n p etc fstab sed n p etc fstab sed n p etc...