[英]Bash script using awk in for loop
for i in $LIST
do
CFG=`ssh $i "cat log.txt|awk '{print $2}'"`
for j in $CFG
do
echo $j
done
done
假設我想在一對遠程主機上的日志文件中打印第二個字段。 在上面的腳本中,打印$ 2不起作用。 我怎樣才能解決這個問題? 謝謝。
根據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}'"`
嘗試
for i in $LIST
do
ssh $i "cat log.txt|awk '{print \$2}'"
done
確保你從shell ssh listvalue cat log.txt|awk '{print }'
出$2
- 你現在最終發送的ssh命令是這樣的: ssh listvalue cat log.txt|awk '{print }'
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配置方式)。 失去了貓。 沒用的..
for server in $LIST
do
ssh "$server" "awk '{print \$2}' log.txt"
don
我能夠將awk放入雙循環中
for i in 1 2 3 4;do for j in $\\(ls | awk -v I=$i '{print $I}'); echo $j done; done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.