Условно реплицировать строки файла табличных данных на основе значения в столбце - PullRequest
0 голосов
/ 18 января 2019

У меня есть большой 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 голосов
/ 18 января 2019

Вы можете использовать Perl one-liner

$ 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

$
0 голосов
/ 18 января 2019

Следующая команда awk дает желаемый результат.

awk 'BEGIN{FS=OFS=","}{split($NF,a,/__/);for(i in a){$NF=a[i];print}}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...