Awk

如何使用awk分隔行

  • May 14, 2019

如何在 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.

引用自:https://unix.stackexchange.com/questions/418721