Replicar uma coluna em um arquivo CSV de uma linha

1

Eu tenho um arquivo que consiste em uma única linha:

a,x,b,c,d,e 

Eu quero converter isso em

a,x,b,x,c,x,d,x,e,x

Qual é a maneira mais fácil de conseguir isso? Uma solução baseada em Python será mais útil

Além disso, supondo que este arquivo seja um arquivo csv, o python facilitará o trabalho?

    
por Stormvirux 26.02.2014 / 12:39

5 respostas

3

Python

#!/usr/bin/env python

from sys import stdin

for line in stdin:
    parts = line.split(',')
    glue = parts.pop(1)
    print(',{0},'.format(glue).join(parts) + ',' + glue)
    
por 26.02.2014 / 15:45
3

Usando sed :

echo 'a,x,b,c,d,e' | sed 's/,\([^x]\)/,,x/g'
    
por 26.02.2014 / 12:43
3
sed 's/,x,/,/g;s/[^,]*/&,x/g'
    
por 26.02.2014 / 13:19
2

Suponho que seus dados não são realmente o que você mostra e, em vez disso, deseja repetir a segunda coluna de um arquivo csv, qualquer que seja essa coluna, não apenas se for um x . Se assim for, estes devem funcionar:

$ echo "a,x,b,c,d,e" | 
    perl -lpe 's/^(.+?),([^,]+)/$1/; $n=$2; s/([^,]+)/$1,$n/g; '
a,x,b,x,c,x,d,x,e,x

E em awk :

$ echo "a,x,b,c,d,e" | 
    awk -F, '{k=$1","$2","$3; for(i=4;i<=NF; i++){k=k","$2","$(i)} 
              print k","$2}'
a,x,b,x,c,x,d,x,e,x
    
por 26.02.2014 / 15:41
1

Um caminho Perl:

echo "a,x,b,c,d,e" |
 perl -lpe '@_= map { $_ => "x" } grep !/x/, split /,/,;$_=join ",",@_;'
a,x,b,x,c,x,d,x,e,x
    
por 26.02.2014 / 13:34