1つのコマンドで2つのジョブを結合する - awk

1つのコマンドで2つのジョブを結合する - awk

私は少し変えなければなりません。

- から

Car
Bus

- 到着

Helicopter
Airplane

これら2つのコマンドで十分です。

awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file

このコマンドで十分です。

sed -e 's/Car/Helicopter/' \
    -e 's/Bus/Airplane/' \
    -i file

「awk」では、「sed」と同様に、2つの操作を1つのコマンドにまとめることができます。

よろしくお願いします!

答え1

この試み:

awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file

これで3つのブロックができましたCondition {Action}1ブロックの特別なケースですcondition {action}

または、次のことを試してください。

awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file

、ワークブロックには複数のステートメントがある可能性があるためです。

答え2

awk -i inplace '
    /^Car$/ { print "Helicopter"; next }
    /^Bus$/ { print "Airplane";   next }
            { print }' file

^アンカーを使用して行全体を一致させることで、文字列が他の行(たとえば)$のサブ文字列と一致しないようにします。見つかった行に対してアクションを実行してすぐに実行することで、行が後続のパターンをトリガーできるものに変更されるのを防ぎます。CarCartnext

関連情報