awkとsedは関連する各行の行末を追加します

awkとsedは関連する各行の行末を追加します

行操作をしたいのですが、行ごとの処理に行き詰まっています。ファイルは次のようになります。

10.10.10.10 ABtest
10.10.10.11 ABprod

行末の文字列に応じて各行に文字列を追加したい。

ABtest私のアプローチは、awk を使用して行末の文字列をテストし、次に sed を使用しABtestて からに変換することですtest。その後、関連する各行に出力を追加します。

次のように出力します。

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

答え1

両方必要ではなく、sed1awkつのツールで済みます。 で目標を達成するコードはawk次のようになります。

awk ' 
/AB/ { 
        printf $0
        gsub("^AB", "", $2)
        printf " %s\n", $2
     }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT

/<expression>/正規表現を検索し、その{<code>}部分は awk にそのレコードの処理方法を指示します。この特定のケースでは、関数はgsub2 番目の列に出現する 'AB' をすべて置き換えます (最初の出現のみを置き換えたい場合は を使用しますsub()が、正規表現に関しては、どちらを使用しても同じ結果になると思います)。その後、結果が印刷されます。

質問では、変更せずに印刷するために編集する行があるかどうかが明確ではありません。その場合は、次のように一致させて編集した後、次のレコードにジャンプする必要があります。

awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT

を使ってさらに具体的なテストを作成するといいかもしれませんif。awk のリソースを調べることを強くお勧めします (ここまたはここ例えば)

関連情報