0

パターンを検索し、特定の文字列をその行に追加する方法の例をいくつか見てきました。私が達成しようとしていることは、少し違うと思います。引数を取り、ファイルで文字列を検索し、見つかった場合は、文字列が見つかった行の末尾に引数を追加する簡単なスクリプトを作成しています。次のようにして、このスクリプトを呼び出します。

$bash- ./myscript.sh arg1 [arg2] ...

コードについては、次のようなものがあります。

for ARGS in $*
do
    gawk '{a[NR]=$0}/<patter to be found>/{a[NR]=a[NR] $ARGS}END{for(i=1;i<=NR;i++)print a[i]}' $ORIGFILE > $DESTFILE
    cp $DESTFILE $ORIGFILE
done

問題は、一重引用符で変数が展開されず、それを実現するための正しい構文が見つからないことです。何も展開されないか、「$0」が展開されて構文エラーがスローされます。

助言がありますか?

ありがとう!

4

2 に答える 2

0

を使ってみてくださいsedawkこのタスクよりも簡単に思えます。

sed -i "s/<pattern>/$*/" $ORIGFILE

ノート

  1. ループは必要ありません。$*すべての引数をキャプチャします
  2. 別のファイルを作成してコピーする必要はありません。-iインプレース置換を行います
  3. "シェル変数を展開するには、式を二重引用符で囲みます
于 2013-10-31T19:03:18.013 に答える
0

次の構文を使用して、シェル変数を awk に渡すことができます。

awk -v arg0="$0" -v arg1="$1" '{ print arg0, arg1, $0 }' file
于 2013-10-31T18:57:08.020 に答える