sed は行の最後のフィールドを検索して置き換えます。

sed は行の最後のフィールドを検索して置き換えます。

sedとawkを使用して、検索値と一致する行(ファイル内)のすべての最後の(スペースで区切られた)フィールドを検索する方法はありますか(文字列が最後のフィールドの前のフィールドで一致しても触れません)他のフィールド)検索値を別のものに変更できますか?

210983342900 342832423-1 i2301rw1900 309212dw90 900
9328423ABC 32091840-943543-9435 3012=32193900 301 3029432 334
210983342900ABCDE 342832423-1 i2301rw1900 309212dw90 900
9328423 32091840-943ABC3-9435 3012=32193900 301 3029432 ABC
3843209898 48435843098543098543 43985439859209438543 499 ABC

したがって、すべての最後のフィールドでABCを検索し、見つかったすべての値をDEFGに変更するか、すべての最後のフィールドで900を検索して000に変更します。

問題を分析して解決策を説明できますか?

ベストアンサー1

echo 'This is terrible, I feel terrible' | awk '{if ($NF~"^terri") $NF="good"; print}'

これはトリックを行います。

$NF場所のフィールドですNF。以下はawkフィールド数なので、最後のフィールドです。

$NF~"^terri"~正規表現と一致させるために使用されます。==これは、正確な一致が必要な場合に機能します。

$NF="good"フィールドは置き換えられますが、if条件が満たされた場合にのみ可能です。

最後に、print履歴全体を印刷します。

echo '
    210983342900 342832423-1 i2301rw1900 309212dw90 900
9328423ABC 32091840-943543-9435 3012=32193900 301 3029432 334
210983342900ABCDE 342832423-1 i2301rw1900 309212dw90 900
9328423 32091840-943ABC3-9435 3012=32193900 301 3029432 ABC
3843209898 48435843098543098543 43985439859209438543 499 ABC
' | awk '{if ($NF=="ABC") $NF="DEFG"; print}'

おすすめ記事