AWK/GAWK はパターン一致後に文字を追加します。

AWK/GAWK はパターン一致後に文字を追加します。

テストファイルには次のデータ構造があります。

"111","222","AAABBB","333","444","555"

次のように、3番目の[AZ]の後に「-」があるように3番目のフィールドを変換したいと思います。

"111","222","AAA-BBB","333","444","555"

スプリット()機能を使用することは、そのタスクに最適なツールですか?私が試したことは次のとおりです。

awk 'BEGIN{OFS=FS=","} {split($3, a, "[A-Z]{3}", seps); print seps[1]"/"seps[2]};' test

上記のコマンドは私がしたいことを行いますが、更新された$ 3フィールドを含む行全体をどのように印刷しますか?結果:

AAA-BBB

ベストアンサー1

短いawk解決策:

awk 'BEGIN{ OFS=FS="," }{ sub(/[A-Z]{3}/, "&-", $3) }1' file
  • [A-Z]{3}- 大文字3つに一致する正規表現パターン
  • &- 正規表現パターン一致の正確な部分文字列を表します。

出力:

"111","222","AAA-BBB","333","444","555"

おすすめ記事