2016-07-13 4 views
1

を働いていない理由:awkは-v私はシェルで機能してい

+ name=topbeat.yml 
++ awk -v file=topbeat.yml '-F|' '{if($1~/file/)print $2}' ps.conf 
+ dest= 

しかし、私は値を取得していない午前:デバッグモードで

ConfigHandler(){ 
    name=$1 
    dest=`awk -v file=$name -F"|" '{if($1~/file/)print $2}' ps.conf` 
    echo $dest 
    echo "Moving $1 to $dest ...." 
    mv `pwd`/$1 $dest/$1 
    echo "" 
    echo "" 
} 

を、私は値が渡さ取得を参照してくださいすることができますdest、私はどこO/Pすなわち期待

awk -F"|" '{if($1~/topbeat/)print $2}' ps.conf 

リターンとして、それは/etc/topbeat/になりたいです

ps.conf

topbeat.yml|/etc/topbeat/ 
logstash.conf|/opt/monitor/tools/etc/ 
jmxd.tar|/opt/ 

答えて

5

構文/pattern/だけではない変数を、リテラルのために使用することができます。

$1~/file/ 

へ:awkスクリプトの構造がcondition { action }であることを

$1 ~ file 

注意、{ print }からconditionデフォルトに1(真)と{ action }デフォルト(

あなたが変更する必要がありますレコード全体を印刷する、$0)。そのように、あなたはifを使用する必要はありません。

$1 ~ file { print $2 } 

また、常にあなたの変数を引用することを忘れないでください:

:カップルより多くの変更により

awk -v file="$name" # ... 
echo "$dest" # etc. 

を、これは最終的な結果になります

ConfigHandler(){ 
    dest=$(awk -v file="$1" -F"|" '$1 ~ file { print $2 }' ps.conf) 
    printf 'Moving %s to %s...\n\n\n' "$1" "$dest" 
    mv "$1" "$dest" 
} 
+0

ああ!私の悪い。ありがとう –

関連する問題