Gerando uma nova lista a partir de uma existente com base na primeira coluna

Gerando uma nova lista a partir de uma existente com base na primeira coluna

Eu tenho uma lista no seguinte formato:

group1;visitor1,visitor2,visitor3,
group2;visitor4,visitor5

Da lista acima, preciso gerar uma lista da seguinte maneira:

group1,visitor1
group1,visitor2
group1,visitor3
group2,visitor4
group2,visitor5

Responder1

Isso émuitoigual aUsando AWK para um arraye algumas outras perguntas. A ideia principal é imprimir cada campo do campo dois em diante em uma linha separada anexada pelo primeiro campo.

Nesse caso, especificamos que o separador de campo é ou ,e ;também nos certificamos de não imprimir campos vazios (há um campo vazio no final da primeira linha nos dados fornecidos). A OFSvariável que definimos na linha de comando -vé a string separadora de saída que será usada para delimitar os campos de saída e NFé o número de campos na linha.

awk -F '[,;]' -v OFS=',' '{ for (i = 2; i <= NF; ++i) if ($i != "") print $1, $i }' file

Dados os dados da pergunta, isso gera

group1,visitor1
group1,visitor2
group1,visitor3
group2,visitor4
group2,visitor5

Responder2

Isso pode ser feito usando GNU sed assim:

sed -r 's:,$::;y:;,:,;:;:l;s:^(([^,]+)[^;]+);:\1\n\2,:;tl' file

Para cada linha de entrada, estou excluindo a vírgula final, se houver, e depois trocando vírgulas por ponto-e-vírgula para ajudar na impressão. Depois disso, estou executando um loop de pesquisa e substituição, entre :le tlpara preceder o nome do grupo para cada visitante na linha de entrada atual.

informação relacionada