Linux awk编辑器及命令
生活随笔
收集整理的這篇文章主要介紹了
Linux awk编辑器及命令
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Linux awk編輯器及命令
- 一、awk編輯器
- 1.工作原理
- 2.命令格式
- 3.awk常見的內(nèi)建變量如下所示:
- 二、按行輸出文本
- 三、按字段輸出文本
- 四、通過管道、雙引號調(diào)用 Shell 命令
一、awk編輯器
1.工作原理
- 逐行讀取文本,默認(rèn)以空格或tab鍵為分隔符進(jìn)行分隔,將分隔所得的各個(gè)字段保存到內(nèi)建變量中,并按模式或者條件執(zhí)行編輯命令。
- sed命令常用于一整行的處理,而awk比較傾向于將一行分成多個(gè)“字段”然后再進(jìn)行處理。awk信息的讀入也是逐行讀取的,執(zhí)行結(jié)果可以通過print的功能將字段數(shù)據(jù)打印顯示。在使用awk命令的過程中,可以使用邏輯操作符“&&”表示“與”、“||”表示“或”、“!”表示“非”;還可以進(jìn)行簡單的數(shù)學(xué)運(yùn)算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方。
2.命令格式
awk 選項(xiàng) '模式或條件 {操作}' 文件 1 文件 2 … awk -f 腳本文件 文件 1 文件 2 …3.awk常見的內(nèi)建變量如下所示:
FS:列分割符。指定每行文本的字段分隔符,默認(rèn)為空格或制表位。與"-F"作用相同 NF:當(dāng)前處理的行的字段個(gè)數(shù)。 NR:當(dāng)前處理的行的行號(序數(shù))。 $0:當(dāng)前處理的行的整行內(nèi)容。 $n:當(dāng)前處理行的第n個(gè)字段(第n列)。 FILENAME:被處理的文件名。 RS:行分隔符。awk從文件上讀取資料時(shí),將根據(jù)RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進(jìn)行處理。預(yù)設(shè)值是’\n’二、按行輸出文本
awk '{print}' 1.txt #輸出所有內(nèi)容 awk '{print $0}' 1.txt #輸出所有內(nèi)容 awk 'NR==1,NR==3{print}' 1.txt #輸出第 1~3 行內(nèi)容 awk '(NR>=1)&&(NR<=3){print}' 1.txt #輸出第 1~3 行內(nèi)容 awk 'NR==1||NR==3{print}' 1.txt #輸出第1行、第3行內(nèi)容 awk '(NR%2)==1{print}' 1.txt #輸出所有奇數(shù)行的內(nèi)容 awk '(NR%2)==0{print}' 1.txt #輸出所有偶數(shù)行的內(nèi)容 awk '/^root/{print}' /etc/passwd #輸出以 root 開頭的行 awk '/nologin$/{print}' /etc/passwd #輸出以 nologin 結(jié)尾的行 awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd #統(tǒng)計(jì)以/bin/bash 結(jié)尾的行數(shù),等同于 grep -c "/bin/bash$" /etc/passwdBEGIN模式表示,在處理指定的文本之前,需要先執(zhí)行BEGIN模式中指定的動作;awk再處理指定的文本,之后再執(zhí)行END模式中指定的動作,END{}語句塊中,往往會放入打印結(jié)果等語句
三、按字段輸出文本
awk -F ":" '{print $3}' /etc/passwd #輸出每行中(以":"分隔)的第3個(gè)字段 awk -F ":" '{print $1,$3}' /etc/passwd #輸出每行中的第1、3個(gè)字段 awk -F ":" '$3<5{print $1,$3}' /etc/passwd #輸出第3個(gè)字段的值小于5的第1、3個(gè)字段內(nèi)容 awk -F ":" '!($3<200){print}' /etc/passwd #輸出第3個(gè)字段的值不小于200的行 awk 'BEGIN {FS=":"};{if($3>=200){print}}' /etc/passwd #先處理完BEGIN的內(nèi)容,再打印文本里面的內(nèi)容 awk -F ":" '{max=($3>$4)?$3:$4;{print max}}' /etc/passwd #($3>$4)?$3:$4三元運(yùn)算符,如果第3個(gè)字段的值大于第4個(gè)字段的值,則把第3個(gè)字段的值賦給max,否則第4個(gè)字段的值賦給max awk -F ":" '{print NR,$0}' /etc/passwd #輸出每行內(nèi)容和行號,每處理完一條記錄,NR值加1 awk -F ":" '$7~"/bash"{print $1}' /etc/passwd #輸出以冒號分隔且第7個(gè)字段中包含/bash的行的第1個(gè)字段 awk -F ":" '($1~"root")&&(NF==7){print $1,$2}' /etc/passwd #輸出第1個(gè)字段中包含root且有7個(gè)字段的行的第1、2個(gè)字段 awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd #輸出第7個(gè)字段既不為/bin/bash,也不為/sbin/nologin的所有行四、通過管道、雙引號調(diào)用 Shell 命令
echo $PATH | awk 'BEGIN{RS=":"};END{print NR}' #統(tǒng)計(jì)以冒號分隔的文本段落數(shù),END{}語句塊中,往往會放入打印結(jié)果等語句 awk -F: '/bash$/{print | "wc -l"}' /etc/passwd #調(diào)用 wc -l 命令統(tǒng)計(jì)使用 bash 的用戶個(gè)數(shù),等同于 grep -c "bash$" /etc/passwd free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}' #查看當(dāng)前內(nèi)存使用百分比 top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}' #查看當(dāng)前CPU空閑率,(-b -n 1 表示只需要1次的輸出結(jié)果) date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S" #顯示上次系統(tǒng)重啟時(shí)間,等同于uptime;second ago為顯示多少秒前的時(shí)間,+"%F %H:%M:%S"等同于+"%Y-%m-%d %H:%M:%S"的時(shí)間格式 awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}"%"}' #調(diào)用w命令,并用來統(tǒng)計(jì)在線用戶數(shù) awk 'BEGIN {"hostname" | getline ; {print $0}}' #調(diào)用 hostname,并輸出當(dāng)前的主機(jī)名當(dāng)getline左右無重定向符“<”或“|”時(shí),getline作用于當(dāng)前文件,讀入當(dāng)前文件的第一行給其后跟的變量var或$0;應(yīng)該注意到,由于awk在處理getline之前已經(jīng)讀入了一行,所以getline得到的返回結(jié)果是隔行的。
當(dāng)getline左右有重定向符“<”或“|”時(shí),getline則作用于定向輸入文件,由于該文件是剛打開,并沒有被awk讀入一行,只是getline讀入,那么getline返回的是該文件的第一行,而不是隔行。
總結(jié)
以上是生活随笔為你收集整理的Linux awk编辑器及命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apu内存频率再创新高,速度惊人
- 下一篇: 内存超频:性能提升的秘密武器