2017-08-16 162 views
0

我不是一個awk用戶,但經過一些谷歌搜索後,確定它最適合我所要做的事情......唯一的問題是,我無法讓它工作。我試圖在sudoers條目前插入服務器名稱($ i)和一個逗號以打印出sudoers的內容,因爲我將它指向一個.csv文件。試圖打印awk變量

egrep '^[aA-zZ]|^[%]' //$i/etc/sudoers | awk -v var="$i" '{print "$var," $0}' | tee -a $LOG 

這是我得到的輸出:提前

$var,unixpvfn ALL = (root)NOPASSWD:/usr/bin/passwd 

awk: no program given 

感謝

+0

'... '{VAR打印,$ 0}' ...' –

+0

我試過了,我得到這個: AWK:非法場$(aappmab00001d01),名稱爲 「VAR」 輸入記錄編號1,文件 源代碼行號1 awk:沒有編寫程序 –

+1

請注意,@JamesBrown建議'print var',而不是'print $ var'。 Awk不是shell,它的語法與C相比更加類似於shell。你得到的答案沒有一個在你的發佈的輸出中解釋'awk:no program given',所以你可能會發現另一個問題,可能與在你沒有向我們顯示的地方錯誤地使用引號(不匹配或錯誤類型的引號) 。 –

回答

1

egrep是多餘這裏。只是awk

awk -v var="$i" '/^[[:alpha:]%]/{print var","$0}' //"$i"/etc/sudoers | tee -a "$LOG" 

順便說一句,你也可以使用sed

sed "/^[[:alpha:]%]/s/^/${i},/" //"$i"/etc/sudoers | tee -a "$LOG" 
+0

這就像一個冠軍 - 謝謝! –

+0

很高興看到它幫助 – hek2mgl

0

可以保存grep,讓awk做所有的工作:

awk -v svr="$i" '/^[aA-zZ%]/{print svr "," $0}' //$i/etc/sudoers 
    | tee -a $LOG 

如果您把東西放在".."之間,意思是字面上的嚴格g,並且變量不會在awk中擴展。另外,不要把$放在變量前面,它會顯示列,而不是你所指的變量。

+0

感謝您的回覆 - 這也很有效 –

+0

正確的想法,但'[aA-zZ]'是指'a','Z'和'A'和'z'之間的字符成爲空集。我知道OP有這個,但它沒有任何意義 - 反覆考慮使用'[:alpha:]'。 –