拆分/重复行,就像反向group_concat一样

时间:2016-07-20 09:31:18

标签: regex string bash text data-manipulation

我想分割/复制行(拆分某些部分,然后复制其余部分),就像在MySQL中反向group_concat一样。

输入如下(总共超过1M行):

2016-07-18 08:55:09,www.rozklad-pkp.pl,0.575,160x600;120x600,standard
2016-07-18 08:55:09,rozklad-pkp.pl,0.575,320x50;468x60;320x100;750x200;300x75,mobile
2016-07-18 08:55:09,wpolityce.pl,0.87,300x75;300x250;320x100;300x50;320x50,mobile

例如我想得到的第二行:

2016-07-18 08:55:09,rozklad-pkp.pl,0.575,320x50,mobile
2016-07-18 08:55:09,rozklad-pkp.pl,0.575,468x60,mobile
2016-07-18 08:55:09,rozklad-pkp.pl,0.575,320x100,mobile
2016-07-18 08:55:09,rozklad-pkp.pl,0.575,750x200,mobile
2016-07-18 08:55:09,rozklad-pkp.pl,0.575,300x75,mobile

我不知道如何到达那里,特别是如果我想分割一行的行数不同。

这个概念对我来说太抽象了,我不知道如何正确地“掌握”它。

我想到了“映射”线,将它分成单独的部分(左边部分,要分割的部分和右边部分),grep分数,分裂并将它复制回来;但对我来说这很复杂,我认为必须有其他更简单的方法。

我可以使用grep,sed,awk,Perl等(一般是bash)或SQLite。

1 个答案:

答案 0 :(得分:2)

您可以尝试以下awk脚本:

awk -F, -v OFS="," '{split($4,a,";"); for(i in a) {$4=a[i];print}}' file

将根据每行第4个字段的内容复制行。