次のような 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 Me
happy 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 構文に問題があります。