for i in $LIST
do
CFG=`ssh $i "cat log.txt|awk '{print $2}'"`
for j in $CFG
do
echo $j
done
done
說我想在遠程主機上的日誌文件中打印第二個字段。在上面的腳本中,打印$ 2不起作用。我怎樣才能解決這個問題?謝謝。在for循環中使用awk的bash腳本
for i in $LIST
do
CFG=`ssh $i "cat log.txt|awk '{print $2}'"`
for j in $CFG
do
echo $j
done
done
說我想在遠程主機上的日誌文件中打印第二個字段。在上面的腳本中,打印$ 2不起作用。我怎樣才能解決這個問題?謝謝。在for循環中使用awk的bash腳本
確保你從殼逸出$2
- 你結束了,現在發送ssh命令是這樣的:ssh listvalue cat log.txt|awk '{print }'
失去了一隻貓。它沒用..
for server in $LIST
do
ssh "$server" "awk '{print \$2}' log.txt"
don
根據shell擴展的數量和報價多反斜槓的類型,需要:
awk '{ print $2 }' log.txt # none
ssh $server "awk '{ print \$2 }' log.txt" # one
CFG=`ssh $server "awk '{ print \\$2 }' log.txt"` # two
CFG=$(ssh $server "awk '{ print \$2 }' log.txt") # one (!)
正如一招就可以把美元符號和兩個之間的空間以防止所有$擴展。 AWK仍然會粘一起:
CFG=`ssh $i "cat log.txt|awk '{print $ 2}'"`
這個答案非常有幫助!感謝schot! – Stan 2010-10-05 17:36:59
for server in $LIST
do
ssh "$server" 'awk "{print $2}" log.txt'
done
single-quote
和double-quote
的位置。"
)內的變量(words beginning with $
)展開。'
)停止Bash尋找內部變量。user131527
和psj
建議,逃避$2
與\
也應該有工作(根據您的Bash是如何配置的)。我能夠把AWK在雙for循環
for i in 1 2 3 4;do for j in $\(ls | awk -v I=$i '{print $I}'); echo $j done; done
一定要在你的答案中設置你的代碼的格式,使它看起來像代碼'''''''' – unmultimedio 2017-03-10 19:01:00
@unmultimedio編號SO在代碼塊內的所有行的開頭使用四個空格 – FelixSFD 2017-03-10 19:35:52
你說得對,它是'代碼行使用'code'',代碼塊使用4個空格 – unmultimedio 2017-03-10 21:10:09
使用'cat'是不必要的:'CFG = $(SSH $ I「的awk '{打印$ 2}' 日誌.txt「)' – 2010-09-30 22:16:24