将 TSV 中的列拆分为 CSV

Goo*_*bot 3 sed awk text-processing csv text-formatting

我有一个包含两列的 TSV 文件,格式为

id1\tcol1,col2,col3
id2\tcol4,col5
Run Code Online (Sandbox Code Playgroud)

我想将第二列与第一列结合起来进行输出

id1,col1
id1,col2
id1,col3
id2,col4
id2,col5
Run Code Online (Sandbox Code Playgroud)

有两个问题:

  • TSV第二列中逗号分隔值的数量不固定
  • 文件太大,无法加载到内存中

逗号分隔符值很干净,没有任何,. 因此不"使用封闭。因此,我们在每个逗号处进行分割。

Ed *_*ton 9

使用任何 awk:

$ awk -F'[\t,]' -v OFS=',' '{for (i=2; i<=NF; i++) print $1, $i}' file
id1,col1
id1,col2
id1,col3
id2,col4
id2,col5
Run Code Online (Sandbox Code Playgroud)

上面假设您的第一列不能包含,s ,第二列不能包含制表符,从示例和问题中有关数据格式的陈述来看,这两者似乎都是正确的,因此它应该适用于您的数据。


Kus*_*nda 7

$ mlr --t2c -N nest --evar , -f 2 file
id1,col1
id1,col2
id1,col3
id2,col4
id2,col5
Run Code Online (Sandbox Code Playgroud)

这使用Miller ( mlr) 读取由制表符分隔的无标头字段组成的记录并写入无标头 CSV。

对于每条记录(行),nest的操作mlr通过 options 进行评估--evar , -f 2,这意味着“将字段 2 中以逗号分隔的子字段(“嵌套字段”)分解为新记录”。