2013-04-10 105 views
1

雖然我可以在log中看到count和pattern值,但我無法獲得macthed值。請幫助我,我的要求是獲取變量中的設備列表,但我認爲它沒有提取count和pattern值。awk使用變量

pattern=ABCD 
count=4 
x=3 
if [[ $count -gt $x ]] ; then 
echo "Count : $count" >> ${LOGFILE} 
echo "Pattern : $pattern" >> ${LOGFILE} 
list=cat /tmp/info.txt | awk 'a-->0;/"$pattern"/{a=$count}' 
echo "List : $list" >> ${LOGFILE}` 

我曾嘗試以下方法,但沒有工作

cat /tmp/info.txt | awk 'a-->0;/"$pattern"/{a=$count}' >> ${LOGFILE} 

當我直接在命令行中運行它的正常工作......

cat /tmp/info.txt | awk 'a-->0;/ABCD/{a=4}' 

回答

3

「模式」是一個shell變量。 awk不是shell,它是awk,所以你不應該期望在awk腳本中訪問shell變量,就像你不希望在C程序中訪問它們一樣。在comp.unix.shell FAQ

見問題24:

http://cfajohnson.com/shell/cus-faq-2.html#Q24

,並使用 「-v」 選項。

然後解決您的外殼問題也和得到這樣的結果:

pattern=ABCD 
count=4 
x=3 
if [[ $count -gt $x ]] ; then 
echo "Count : $count" >> "$LOGFILE" 
echo "Pattern : $pattern" >> "$LOGFILE" 
list=$(awk -v pattern="$pattern" -v count="$count" 'a-->0; $0 ~ pattern{a=count}' /tmp/info.txt) 
echo "List : $list" >> "$LOGFILE" 

這沒有多大意義,但應該是語法正確的,至少,一旦你在適當的地方加上fi。如果你告訴我們你想做什麼,我們可以幫你寫一個明智的腳本來做到這一點。