根据列中的值有条件地复制表格数据文件的行

时间:2019-01-17 21:10:30

标签: linux bash shell awk

我有一个具有以下结构的大型csv文件:

col1,col2,codes
1,2,aaa__bbb
2,4,aaa__eee
3,4,ccc

第3列被编码为三个以'__'分隔的字符。

我想创建一个新的csv,它为列代码的每个组件复制行。结果应类似于:

col1,col2,codes
1,2,aaa
1,2,bbb
2,4,aaa
2,4,eee
3,4,ccc

这是一个相当大的文件(大约10G)。我想在不使用编程语言的情况下执行此bash(awk?)。实际文件约有3000列。

2 个答案:

答案 0 :(得分:0)

遵循awk命令会产生所需的结果。

awk 'BEGIN{FS=OFS=","}{split($NF,a,/__/);for(i in a){$NF=a[i];print}}' file

答案 1 :(得分:-1)

您可以使用Perl单线版

$ cat joseph.txt
col1,col2,codes
1,2,aaa__bbb
2,4,aaa__eee
3,4,ccc

$ perl -F, -lane ' if($.>1) {  print "$F[0],$F[1],",$_ for(split("__",$F[2])) } ' joseph.txt
1,2,aaa
1,2,bbb
2,4,aaa
2,4,eee
3,4,ccc

$