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}'