Text-Processing

將 CSV 轉換為 TSV

  • December 23, 2021

我有許多大型 CSV 文件,並希望它們採用 TSV(製表符分隔格式)。複雜之處在於 CSV 文件的欄位中有逗號,例如:

A,,C,"D,E,F","G",I,"K,L,M",Z

預期輸出:

A      C   D,E,F   G   I   K,L,M   Z

(中間的空格是“硬”標籤)

我在這台伺服器上安裝了 Perl、Python 和 coreutils。

Python

添加到名為 的文件csv2tab,並使其可執行

touch csv2tab && chmod u+x csv2tab

添加到它

#!/usr/bin/env python
import csv, sys
csv.writer(sys.stdout, dialect='excel-tab').writerows(csv.reader(sys.stdin))

試執行

$ echo 'A,,C,"D,E,F","G",I,"K,L,M",Z' | ./csv2tab                     
A       C   D,E,F   G   I   K,L,M   Z
$ ./csv2tab < data.csv > data.tsv && head data.tsv                                                   
1A      C   D,E,F   G   I   K,L,M   Z
2A      C   D,E,F   G   I   K,L,M   Z
3A      C   D,E,F   G   I   K,L,M   Z

使用csvkit(Python),例如:

$ csvformat -T in.csv > out.txt

流式傳輸,正確的 CSV 和 TSV 引用和轉義

它在 apt 和其他包管理器中

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