2017-01-23 15 views
0

変更をファイルのセットに追加しようとしていますが、期待どおりに動作しません。出力は完全に印刷されていますが、一連のファイルには追加されません。Awk forループを使用して一連のファイルを読み書きする

cat file 
test 
test1 

for i in `cat file`;do 
    awk '/\[groups/{a=1;print;next} /^\[/{a=0}a && /=/{$0=$0",raspberry"}7' $i; 
done > $i.tmp && mv $i.tmp $i 

親切にお手伝いください。

あなたが本当に apply the changesを意味 append the changesを言うとき、これはあなたがループし、任意のawkでそれを行うだろうかと仮定すると
+1

いくつかのデータと期待される出力を見てみましょう。 –

+1

2つの問題: '私は' for'の範囲外です...常に可変置換を二重引用符で囲みます –

答えて

1

while IFS= read -r i; do 
    awk '/\[groups/{a=1;print;next} /^\[/{a=0}a && /=/{$0=$0",raspberry"}7' "$i" > "$i.tmp" && 
    mv "$i.tmp" "$i" 
done < file 

が、あなたのawkコマンドは、明確かつシンプルな可能性があり、https://stackoverflow.com/a/41811423/1745001を見て、 GNU awkやGNU xargsをお持ちの場合、ループファイルやtmpファイルは必要ありません。

xargs -d $'\n' < file awk -i inplace '/\[/{f=/groups/} f{if (NF) $0=$0",raspberry"} 1' 
+0

ハイモモン は完全に動作します。ありがとう。しかし、スクリプトをもう一度実行してもう一度そのスクリプトを追加すると、とにかくラズベリーが既にそこにあるかどうか、そこに他の出口があるかどうかを確認することができます。 plz help – catchvenki

+0

xargsコマンドでも、構文エラーが表示されます – catchvenki

+0

もちろん、ラズベリーが最初に存在するかどうかを確認するのは簡単ですが、今はその要件を今言及しているだけです。 ? wrt xargs 'いくつかの構文エラーを表示しています' - あなたが構文エラーメッセージが何であるかを教えてくれたことをデバッグするのに役立つと思いますか? –

関連する問題