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)
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?
Usando sed
:
echo 'a,x,b,c,d,e' | sed 's/,\([^x]\)/,,x/g'
sed 's/,x,/,/g;s/[^,]*/&,x/g'
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
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
Tags python text-processing csv