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)
有两个问题:
逗号分隔符值很干净,没有任何,
. 因此不"
使用封闭。因此,我们在每个逗号处进行分割。
使用任何 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 ,第二列不能包含制表符,从示例和问题中有关数据格式的陈述来看,这两者似乎都是正确的,因此它应该适用于您的数据。
$ 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 中以逗号分隔的子字段(“嵌套字段”)分解为新记录”。