awk基本用法python
基本用法: awk [options] ‘program’ var=value file… awk [options] -f programfile var=value file… awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file ... awk 程序一般由:BEGIN語句塊、可以使用模式匹配的通用語句塊、END語句塊,共3部 分組成 program一般是被單引號或雙引號中 選項: -F 指明輸入時用到的字段分隔符 -v var=value: 自定義變量
awk語言shell
基本格式:awk [options] 'program' file… program:pattern{action statements;..} pattern和action: • pattern部分決定動做語句什麼時候觸發及觸發事件 BEGIN,END • action statements對數據進行處理,放在{}內指明 print, printf 分割符、域和記錄 • awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱爲 域標識。$0爲全部域, 注意:和shell中變量$符含義不一樣 • 文件的每一行稱爲記錄 • 省略action,則默認執行 print $0 的操做
awk工做原理數組
第一步:執行BEGIN{action;… }語句塊中的語句 第二步:從文件或標準輸入(stdin)讀取一行,而後執行 pattern{ action;… }語句塊,它逐行掃描文件,從第一行到最後一 行重複這個過程,直到文件所有被讀取完畢。 第三步:當讀至輸入流末尾時,執行END{action;…}語句塊 BEGIN語句塊在awk開始從輸入流中讀取行以前被執行,這是一個 可選的語句塊,好比變量初始化、打印輸出表格的表頭等語句一般 能夠寫在BEGIN語句塊中 END語句塊在awk從輸入流中讀取完全部的行以後即被執行,好比 打印全部行的分析結果這類信息彙總都是在END語句塊中完成,它 也是一個可選語句塊 pattern語句塊中的通用命令是最重要的部分,也是可選的。若是沒 有提供pattern語句塊,則默認執行{ print },即打印每個讀取到的 行,awk讀取的每一行都會執行該語句塊
awk變量spa
變量:內置和自定義變量 FS:輸入字段分隔符,默認爲空白字符 awk -v FS=':' '{print $1,FS,$3}’ /etc/passwd awk –F: '{print $1,$3,$7}’ /etc/passwd OFS:輸出字段分隔符,默認爲空白字符 awk -v FS=‘:’ -v OFS=‘:’ '{print $1,$3,$7}’ /etc/passwd RS:輸入記錄分隔符,指定輸入時的換行符 awk -v RS=' ' ‘{print }’ /etc/passwd ORS:輸出記錄分隔符,輸出時用指定符號代替換行符 awk -v RS=' ' -v ORS='###'‘{print }’ /etc/passwd NF:字段數量 awk -F: ‘{print NF}’ /etc/fstab,引用內置變量不用$ awk -F: '{print $(NF-1)}' /etc/passwd NR:記錄號 awk '{print NR}' /etc/fstab ; awk END'{print NR}' /etc/fstab
FNR:各文件分別計數,記錄號 awk '{print FNR}' /etc/fstab /etc/inittab FILENAME:當前文件名 awk '{print FILENAME}’ /etc/fstab ARGC:命令行參數的個數 awk '{print ARGC}’ /etc/fstab /etc/inittab awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab ARGV:數組,保存的是命令行所給定的各參數 awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab
awk自定義變量命令行
自定義變量(區分字符大小寫) (1) -v var=value (2) 在program中直接定義 示例: (1)awk -v test='hello gawk' '{print test}' /etc/fstab (2)awk -v test='hello gawk' 'BEGIN{print test}' (3)awk 'BEGIN{test="hello,gawk";print test}' (4)awk –F:‘{sex=「male」;print $1,sex,age;age=18}’ /etc/passwd (5)cat awkscript (6){print script,$1,$2} (7)awk -F: -f awkscript script=「awk」 /etc/passwd
awk模式匹配blog
模式匹配符: (1) ~:左邊是否和右邊匹配包含 !~:是否不匹配 示例: (1)awk –F: '$0 ~ /root/{print $1}‘ /etc/passwd (2)awk '$0~「^root"' /etc/passwd awk '$0 !~ /root/‘ /etc/passwd (3)awk –F: ‘$3==0’ /etc/passwd