【发布时间】:2016-07-20 09:31:17
【问题描述】:
我想拆分/复制行(拆分一部分,然后复制其余部分),就像 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'ing 分号的数量,将其拆分并复制回来;但这对我来说相当复杂,我认为必须有其他更简单的方法。
我可以使用 grep、sed、awk、Perl 等(通常是 bash)或 SQLite。
【问题讨论】:
-
对于所有行,其中列出了许多尺寸(用分号分隔)。编辑:所以,示例第 1 行拆分为 2;第 2 行到第 5 行(如图所示),第 3 行到第 5 行等等。
-
我不想删除任何东西,如果有很多尺寸(实际上是广告横幅的尺寸),只需拆分/复制。有些行将不包含分号,在这种情况下,就像现在一样好。包含分号的行将被拆分为与值一样多的新行(复制左右;并在这些值之间剪切,每行 1 个)。
标签: regex string bash text data-manipulation