Bash

僅將逗號分隔的字元串封裝在引號中

  • April 14, 2022

我有一些數據目前是 TSV 格式,但需要轉換成 CSV 格式。唯一的問題是,偶爾在 TSV 中,有些值包含的逗號並不總是在同一列中(每個實例的逗號數量也可能不同)。我想將這些逗號分隔的字元串封裝在引號中,以便 CSV 可以正確解析。

我有什麼(TSV):

Freddy, Jasmine, and Lucy     412      Penguin
Maggie    5,432    salad
Joe       4        John Smith, PhD  

我想要什麼(CSV):

"Freddy, Jasmine, Lucy",412,Penguin
this,"5,432",salad
Joe,4,"John Smith, PhD"

有沒有辦法在 bash 中做到這一點?

csvformat來自CSVKit的工具將完全滿足您的需求:

csvformat --tabs inputFile.dat

例子

printf "%s\n" \
   $'Freddy, Jasmine, and Lucy\t412\tPenguin' \
   $'Maggie\t5,432\tsalad' \
   $'Joe\t4\tJohn Smith, PhD' >inputFile.dat

csvformat --tabs inputFile.dat

輸出

"Freddy, Jasmine, and Lucy",412,Penguin
Maggie,"5,432",salad
Joe,4,"John Smith, PhD"

這種事情的另一個有用工具是米勒- 借用@roaima的輸入文件

$ mlr --itsv --ocsv cat inputFile.dat
"Freddy, Jasmine, and Lucy",412,Penguin
Maggie,"5,432",salad
Joe,4,"John Smith, PhD"

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