Awk使用方法简介
==================AWK===================
AWK簡介:awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數(shù)據(jù)分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入, ? ? ? ? ? ? ? ? ? 以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理;awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的
? ? ? ? ? ? ? ? ? GNU版本。
(1)域分隔符:awk在沒有使用-F指定分割符時,默認以空格為分割符;
? ? 域分割 $0代表文本內(nèi)容全文顯示;
?$1 代表分割第一個域;
? ? ? ? ? ? ? ? ? ? ? ? ? $2 代表分割第二個域;
?......
awk -F: 分割符為‘:’
eg: cat /etc/passwd | awk -F: '{print $1,$2,}'
? ? ? ? ? ? ? ?
? (2) 打印報告頭:
?eg: cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}' | more ? ?
? ? ? ? ? ? ??
? 打印結(jié)尾:
eg: cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}END{"=================="}' | more
?cat /etc/passwd |awk -F: ‘BEGIN{print “===============”}{print $1}END{print “==========”}’ ?|more
? ? ? ? ? ? ? ?
? ??
(3) awk 中的正則表達式:
1>匹配 ~
eg: cat /etc/passwd |awk '{if($1~/root/) print $0}'
? cat /etc/passwd |awk ‘$0~/root/’
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ?? 2>精確匹配:
eg: cat /etc/passwd | awk -F: '$1=="root"{print $0}' ??
? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??? 3> 不匹配:
eg: cat /etc/passwd |awk '{if($1!~/root/) print $0}'
? cat /etc/passwd | awk '$0 !~ /root/'
? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ??? 4>小于,小于或等于:
eg: cat /etc/passwd | awk -F: '{if($3<200) print $3}'
? cat /etc/passwd | awk -F: '{if($3<=200) print $3}' ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ?
? 5>大于,大于或等于:
eg: cat /etc/passwd | awk -F: '{if($3>500) print $3}'
?cat /etc/passwd | awk -F: '{if($3>=500) print $3}'
? ? ? ? ? ? ? ? ?
? ? ? ? ??? 6> 匹配多個關(guān)鍵字:
eg:
cat /etc/passwd | awk -F: '$1 ~ /(root|user)/ {print $0}'
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ?? 7> 匹配行首:
eg: cat test |awk -F: ‘{if($1~/^root/) print $0}’
? cat test |awk -F: ‘$1~/^root/ {print $0}’
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ?? 8> awk 使用 && ||
eg: cat /etc/passwd | awk -F: '{if($1=="root" && $5=="root") print $0}'
? cat /etc/passwd | awk -F: '{if($1=="root" || $1=="sfsdfdsfds") print $0}'?
? ? ? ? ? ? ? ? ? ??
?
(4) awk 中的NF與NR:
NF:瀏覽記錄的域的個數(shù)(統(tǒng)計列的段數(shù))
NR:統(tǒng)計列的行號
eg: cat test |awk -F: ‘{print NF}’ 輸出一共有多少列
?cat test |awk -F: ‘{print NF,NR}’ 輸出一共有多少列及其行號
?cat test |awk -F: ‘{print NR,$0}’ 輸出全部內(nèi)容,并在其前輸出行號
?awk '{if(NR<10 && $1~/root/) print $1}' /etc/passwd 行號小于10的,使用$1匹配root關(guān)鍵字
?cat /etc/passwd | awk -F: '{print $NF}' 打印每段的最后一段 ??
? ? ? ? ? ?
? ? ? ? ? ?
? (5)awk替換:
eg:cat /etc/passwd | awk 'gsub(/root/,"alvinzeng") ' 將文中所有的root替換成alvinzeng,并輸出了所有匹配的行
? ? ? ? ? ? ? ?
?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaocheche/p/7602204.html
總結(jié)
- 上一篇: BZOJ3223文艺平衡树——非旋转tr
- 下一篇: 论如何入门地使用vscode