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 查詢,我需要提取數據並使用逗號 after ) 和 before ( 作為行分隔符將其轉換為不同的行
這個 awk 命令可以做你想做的事:
awk -F '),' '{ print $1")" "\n" $2}' source.csv
結果:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye) (13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
使用 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
.