3

次のような TAB 区切りのファイルがあります。

サンプル.rpt:

54 67 common/bin/my/home {{bla bla bla}} {bla bla} ReplaceMe

89 75 bad/rainy/day/out {{ some bla} } {some bla} DontreplaceMe

3 番目の項目で正規表現の一致を行いたいとします。たとえば、一致する場合は、6 番目の項目を次のような独自のテキストcommon/bin/my/home に置き換えたいとします。Replace Mehappy Home

さらに、正規表現はシェル変数になるため、正規表現を変数として受け入れるコマンドが必要です

アイテムにはスペースまたはバックスラッシュが含まれている場合があり、ファイルはタブで区切られています。

これを達成するために、次の awk ワンライナーを使用しました。

以下では、フィールド 3 が drv で指定されたパターンと一致するかどうかを確認してから、中括弧 {}

awk -F "\t" -v drv=$mod_pat '$3 ~ drv \
  { OFS= "\t"; $6 = " happy_home"; print;}' sample.rpt

今の問題は、パターンが一致しない場合、行をそのまま印刷したいということです。これは同じコマンドで可能ですか?

私は試した:

awk -F "\t" -v drv=$mod_pat \
  'if ($3 ~ drv) { OFS= "\t"; $6 = " happy_home"; print;} else {print;}' sample.rpt

しかし、そのスロー解析エラー。おそらく awk 構文に問題があります。

4

2 に答える 2