awk正則表達(dá)式中調(diào)用ksh變量 收藏
如果ksh中定義了變量pcname,而在嵌入ksh中的awk程序中又要使用這個環(huán)境變量,并且用它在正則表達(dá)式中,該如何用它呢?
最簡單的方法就是:
view plaincopy to clipboardprint?
#!/bin/ksh pcname="ap201" nawk '/'"$pcname"'/{print $2}' $FILE #!/bin/ksh pcname="ap201" nawk '/'"$pcname"'/{print $2}' $FILE 更多方法,參見下面轉(zhuǎn)載的《AWK 使用 Shell 變量》一文:
最近閑著沒事,想寫個Shell腳本,其中用到了 AWK。想在AWK中讀取/設(shè)置Shell腳本中定義的變量,搜索些資源,總結(jié)了一些東東。
讀取變量
在通過如下方式讀取Shell變量
1> awk -v varName=varValue '...' ... 2> awk '...{print "'"${USER}"'"}' ... 此種方式可以訪問系統(tǒng)環(huán)境變量(如USER等),和自定義Shell變量。若這些變量中沒有空格及其他特殊字符,則可以少寫兩個雙引號:awk '...{print "'${USER}"}' ... 3> awk '...{print ENVIRON["USER"]}...' ... 但是這種方法只能訪問系統(tǒng)變量 設(shè)置變量
在AWK中尚未找到設(shè)置Shell變量的方法,因為像上面的讀取的方法中,一旦awk開始執(zhí)行,這些環(huán)境變量都是一個副本,無論處理多少條記錄,不管主Shell中如何變化,所引用的這些變量值都保持不變。而且,通過下面的實驗可以看出來,在AWK中執(zhí)行system函數(shù)調(diào)用命令是另起一個Shell線程,所以無法依靠system來設(shè)置外部環(huán)境變量。
如果你的AWK只打印一條結(jié)果的話,可以使用如下方式在shell環(huán)境中設(shè)置變量 myVar="`echo | awk '{print "AA\nBB\nCC"}'`" 注意,這種方式在awk打印多行情況下會將回車用空格替代后賦值。 實驗過程如下: $ vi tmp.sh
// 編輯內(nèi)容如下 view plaincopy to clipboardprint? #!/bin/bash echo echo "SHELL VERSION : ${SHELL} ${BASH_VERSION}" echo "AWK VERSION : `awk -W version | sed -n '1p'`" echo myVar="AAA BBB CCC DDD" echo "IN SHELL : PID=$" echo "IN SHELL : \${myVar}=\"${myVar}\"" echo echo | awk -v var1="${myVar}" '{ print "IN AWK : how to print single quote : " "'""'"'"'" print "No." NR print "IN AWK : -v : var1=\"" var1 "\"" print "IN AWK : get : ENVIRON[\"USER\"]=\"" ENVIRON["USER"] "\"" print "IN AWK : get : ENVIRON[\"myVar\"]=\"" ENVIRON["myVar"] "\"" print "IN AWK : get : ${USER} =\"" "'""'"${USER}"'" "\"" print "IN AWK : get : ${myVar}=\"" "'""'"${myVar}"'" "\"" system("echo \"IN AWK : system() : PID=$\"") }' myVar="`echo | awk '{print "AA\nBB\nCC"}'`" #\n is replaced by space character echo ${myVar} #!/bin/bash echo echo "SHELL VERSION : ${SHELL} ${BASH_VERSION}" echo "AWK VERSION : `awk -W version | sed -n '1p'`" echo myVar="AAA BBB CCC DDD" echo "IN SHELL : PID=$" echo "IN SHELL : \${myVar}=\"${myVar}\"" echo echo | awk -v var1="${myVar}" '{ print "IN AWK : how to print single quote : " "'"'"'" print "No." NR print "IN AWK : -v : var1=\"" var1 "\"" print "IN AWK : get : ENVIRON[\"USER\"]=\"" ENVIRON["USER"] "\"" print "IN AWK : get : ENVIRON[\"myVar\"]=\"" ENVIRON["myVar"] "\"" print "IN AWK : get : ${USER} =\"" "'"${USER}"'" "\"" print "IN AWK : get : ${myVar}=\"" "'"${myVar}"'" "\"" system("echo \"IN AWK : system() : PID=$\"") }' myVar="`echo | awk '{print "AA\nBB\nCC"}'`" #\n is replaced by space character echo ${myVar} $ . tmp.sh
//輸出結(jié)果如下 view plaincopy to clipboardprint? SHELL VERSION : /bin/bash 3.2.25(1)-release AWK VERSION : GNU Awk 3.1.5 IN SHELL : PID=10627 IN SHELL : ${myVar}="AAA BBB CCC DDD" IN AWK : how to print single quote : ' No.1 IN AWK : -v : var1="AAA BBB CCC DDD" IN AWK : get : ENVIRON["USER"]="zhangll" IN AWK : get : ENVIRON["myVar"]="" IN AWK : get : ${USER} ="zhangll" IN AWK : get : ${myVar}="AAA BBB CCC DDD" IN AWK : system() : PID=17468 AA BB CC 本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/bonny95/archive/2010/07/17/5742008.aspx
|
|
來自: 淡水魚蝦 > 《IT 技術(shù)》