テストファイルには次のデータ構造があります。
"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"