如何在Shell腳本中使用awk指令?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
語(yǔ)法格式:awk [選項(xiàng)] '指令' 操作文件
常用選項(xiàng):-F 指定分隔符,分隔符用""引起來(lái)
-v:var=value在awk程序開(kāi)始之前指定一個(gè)值valu給變量var,這些變量值用于awk程序的BEGIN快
-f:后面跟一個(gè)保存了awk程序的文件,代替在命令行指定awk程序
實(shí)例1:在命令行直接輸入awk指令
awk '{print}' 1.txt #逐行讀取文件1.txt內(nèi)容并打印
awk '{print $0}' 1.txt #逐行讀取文件內(nèi)容,并打印該行,$0保存的是當(dāng)前行的內(nèi)容
awk '{print "hello"}' 1.txt #逐行讀取1.txt文件內(nèi)容,每行結(jié)束后打印一個(gè)hello,文件1.txt有多少行就打印多少個(gè)hello
awk '{print $1}' 1.txt #打印1.txt的第一列內(nèi)容,在不指定分割符的情況下,awk默認(rèn)使用空白做分割符
awk -F ":" '{print $1}' /etc/passwd #以":"為分隔符打印/etc/passwd文件的第一例內(nèi)容
實(shí)例2:將awk指令寫(xiě)入文件,通過(guò)-f選項(xiàng)調(diào)用
vim awkscript BEGIN { FS=":" } {print $1} awk -f awkscript /etc/passwd #通過(guò)調(diào)用awk指令文件來(lái)執(zhí)行awk命令
實(shí)例3:awk的BEGIN塊和END塊
BEGIN用于初始化FS變量(列分隔符),打印標(biāo)題,或者初始化后需要在程序中調(diào)用的全局變量
END用于執(zhí)行最后的運(yùn)算或者打印最終的輸出結(jié)果
END塊和BEGIN不是必須的
實(shí)例4:在awk中使用正則匹配,正則表達(dá)式必須要放在//中
awk '/123/{print}' 1.txt #打印1.txt中匹配123的那一行內(nèi)容
awk -F ":" '/123/{print $2}' 1.txt #以":"為分隔符打印1.txt中匹配123的那一行中,第二列的內(nèi)容
awk -F ":" '$1 ~ /root/{print $2}' /etc/passwd #打印/etc/passwd中,第一列匹配root的行其第二列的內(nèi)容 ~表示匹配
實(shí)例5:awk的表達(dá)式和塊
awk提供了多個(gè)比較操作符:"==
" ">
" "<
" "<=
" ">=
" "!=
" "~
"匹配 "!~
"不匹配
awk 'BEGIN{ FS=":"} $1 == "root" {print $3}' /etc/passwd #以":"為分隔符,打印/etc/passwd中第一列是root的行其第3列的內(nèi)容
實(shí)例6:awk中的條件語(yǔ)句
awk 'BEGIN {FS=":"} {if ($1 ~ "root") {print $2}}' /etc/passwd # 以":"為分隔符,打印/etc/passwd文件中第一列匹配root的行,其第二列的內(nèi)容
awk 'BEGIN {FS=":"} ($1 ~ "linux" || $2 ~ "Network") {print $3}' 1.txt # 以":"為分隔符,打印1.txt文件中,第一列匹配linux或者第二列匹配N(xiāo)etwork的行,其第三列的內(nèi)容
在awk中NF變量記錄的是當(dāng)前行中有多少列(默認(rèn)是空格為分割符)
awk '/ock/{print NF}' 1.txt # 統(tǒng)計(jì)匹配ock的行有多少列
awk 'NF == 3 {print}' 1.txt #打印1.txt中有3列的行的內(nèi)容,示例中,第二行有三列,所以打印的就是第二行的內(nèi)容
$NF記錄的是當(dāng)前行最后一列的內(nèi)容(如果每一行有多列內(nèi)容)
awk '{if (NR > 3) {print $NF} }' 1.txt # 輸出1.txt中行號(hào)大于3的行,其最后一列的內(nèi)容
NR記錄的是當(dāng)前行的行號(hào)
awk '{if (NR > 3) {print NR".\t"$0} }' 1.txt #格式化輸入1.txt中行號(hào)大于3的行的行號(hào)和內(nèi)容
awk 'BEGIN { x=0 } /^$/{x=x+1} END{print "find" " " x " " "blank lines"}' 1.txt #統(tǒng)計(jì)1.txt中有多少空行
awk '{print ($2**2) +1}' 3.txt #將3.txt文件中第二列內(nèi)容做平方運(yùn)算后再加1輸入(字符串做平方運(yùn)算后結(jié)果為0)
awk腳本示例1:
功能:打印1.txt文本中每一列的內(nèi)容
#!/bin/bash num=`wc 1.txt | awk '{print $2}'` # 統(tǒng)計(jì)1.txt文件有多少列 for i in `seq 1 $num` # 根據(jù)文件列數(shù)進(jìn)行循環(huán) do awk -v a=$i '{print $a}' 1.txt # 打印每一列的內(nèi)容,-v 參數(shù)可以指定一個(gè)變量保存外部變量的值,將外部變量傳遞給awk done
看完上述內(nèi)容,你們掌握如何在Shell腳本中使用awk指令的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前文章:如何在Shell腳本中使用awk指令-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.chinadenli.net/article28/gsdcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、微信小程序、網(wǎng)頁(yè)設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、微信公眾號(hào)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容