2016-06-15 10 views
0

私はあなたが私を助けることを願って...私は、プログラミング上の新たなんだと私は簡単に疑問を持っているが、私は他の質問にこれに対する答えを見つけることができません:)bash NR with awk。残りの行を印刷するには?

私はtemplate.confファイルと呼ばれているし、私が必要多くのID.confファイルがそのテンプレートの2行(24と49)を変更するようにします。

awk -v Id=${Id} '(NR==24){$3=${Id}".txt"} (NR==49){$3="Input_"${Id}".txt"}' \ 
    template.conf > ${Id}.conf 

しかし、これは行24と49だけを出力します。テンプレート文書の残りの部分ではありません...

どうすればこの問題を解決できますか?

+5

書かれているとおり、何も印刷されません。実際に行を印刷するには 'awk'と言う必要があります。最後の '}'の後に引用符の中に '1 'を追加すると、そのトリックが行われます。 –

+1

また '()'は必要ありません。また、 '$ {Id}'は値が 'Id'のフィールドです(おそらく文字列なので、デフォルトは0になります)。 awkのVarsはちょうど名前、すなわちIdです。 – 123

+2

awkでは、変数の接頭辞として '$'を使用しないので、 'Id'を書くだけで変数Idの値に展開されます。 '$ 1'は最初のフィールドの値を参照します:' a = $ id '' $ { 1; $(a) ' – andlrc

答えて

1

このawkはうまくいくはずです。

awk -v Id=${Id} 'NR==24{$3=Id".txt"} NR==49{$3="Input_"Id".txt"}1' \ 
template.conf > ${Id}.conf 

私はawk行がbashスクリプトの中にあると思います。 1としたら、awkはすべての行を出力します。

関連する問題