最後の項目を文字列に置き換える方法

最後の項目を文字列に置き換える方法

正規表現と置換文字列が与えられたら、awkを使用して次のことを達成するにはどうすればよいですか?

  • 行に一致するものがない場合、何もしません。
  • 1行に複数の一致が含まれている場合は、最後の一致を代替文字列gsub()に置き換えます。つまり、最後の一致は;
  • 行に一致が1つだけ含まれている場合は、一致を代替文字列に置き換えます。

例えばGawkで「予期しない文字 '\'」が発生しました。

ありがとうございます。

答え1

使用しないでgsub()ください模様FSとOFSのフィールド区切り文字でOFSをそのままにして、最後の2つのフィールドを除くすべてのフィールドを印刷し、次に最後から2番目のフィールドを印刷します。「文字列の変更」その後、最後のフィールドが表示されます。

awk 'BEGIN{ FS=OFS="pat" }
      NF>1{ for(i=1; i<NF-1; i++) printf "%s", $i OFS;
            printf "%s\n", $i "REPLACEMENT-STRING" $NF; next
}1' infile

入力例:

        pat 1 pat2 patt 3 pat 4
 pat
patt pat
pa t

出力:

        pat 1 pat2 patt 3 REPLACEMENT-STRING 4
 REPLACEMENT-STRING
patt REPLACEMENT-STRING
pa t

関連情報