awkを使用して行を区切る方法

awkを使用して行を区切る方法

csvファイルで行を区切る方法は次のとおりです。

(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

以下には2つの異なる行があります。

(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

私は以下を使用しようとしています:

awk -F"[()]" '{print $2}' test.csv 

しかし、うまくいかず、複数行がありません。

データは実際にはSQLクエリであるため、データを抽出した後、コンマ(後ろ)と前(行区切り文字)を使用して別の行に変換する必要があります。

ベストアンサー1

GNUを使用するsed(サンプル入力はというファイルに保存されます./input):

$ sed -e 's/),(/)\n(/g' ./input
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

これにより、すべてのコンマが改行文字に変わります),(

警告する:対応する文字シーケンスが実際のデータに表示されると、そこでも変更されます。

で同じことができますが、以下をawk使用するよりも利点はほとんどありませんsed

$ awk 'gsub(/\),\(/,")\n(",$0)' ./input
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

awk機能が必要な入力ラインに対して追加の処理を実行したくない場合sed

おすすめ記事