
我有一個大型 CSV 文件,其中各列均以逗號分隔。然而,大約 5% 的情況下,第一列本身包含逗號,並且透過以下事實來表示:如果這些欄位內部有逗號,則這些欄位周圍將有引號。
閱讀此文件的好方法是什麼,以便我們在引號中包含逗號時不將逗號視為分隔符號?
我想到的最好的方法是用堆疊做一些複雜的事情,或者看看我們目前是否在引號內,但我認為肯定有一種更簡單的方法。注意:引用中永遠不會有引用,也不會出現除此之外的任何其他極端情況。
*例子:
- 蘋果、10、12、...
- 香蕉、5、10、...
- "Banana, green", 3, 14, ...(注意這一行中有一個逗號,但它有引號來表明這一點)*
我想將最後一行讀入變數“香蕉,綠色”,而不是預設行為將香蕉和綠色讀為單獨的變數。
答案1
使用 GNU awk 進行 FPAT:
$ cat tst.awk
BEGIN { FPAT="[^,]*|\"[^\"]*\"" }
{
print
for (i=1; i<=NF; i++) {
print "\t" i, "<" $i ">"
}
print "---"
}
$ awk -f tst.awk file
Apple,10,12,...
1 <Apple>
2 <10>
3 <12>
4 <...>
---
Banana,5,10,...
1 <Banana>
2 <5>
3 <10>
4 <...>
---
"Banana, green",3,14,...
1 <"Banana, green">
2 <3>
3 <14>
4 <...>
---