Estou tentando analisar dados em dois delimitadores

0

Então, o que estou tentando fazer é para isso:     olhando para o exemplo CSV:

1,3917,3917,BGP=694|Ethernet=1610|LAG=3,Y

Depois que o script é executado, a saída deve ser semelhante a:

1,3917,3917,BGP=694,Y
1,3917,3917,Ethernet=1610,Y
1,3917,3917,LAG=3,Y

Uma linha do arquivo CSV original que continha delimitadores adicionais agora é convertida em três linhas porque havia três campos adicionais na quarta coluna.

Eu tenho trabalhado nisso o dia todo e é isso que eu criei. Isso funcionará?

Código:

 #!/usr/bin/ksh
   if [ $# -ne 1 ];
     then echo "Usage: read.sh filename";
     exit 1;
    fi
   file="$1"
   while read line
     do
       IFS='|'
       set x $line
       while [ a -le #$]
         do
           a=a+1
           echo "'$1','$a'"
         done
     done < $1
    
por Marc 06.09.2012 / 03:18

1 resposta

3

Use AWK em vez

Esse problema é muito mais fácil de resolver com o AWK. Eu testei isso com o GNU AWK; se você estiver usando outra coisa, talvez seja necessário ajustar um pouco.

#!/usr/bin/gawk -f

BEGIN { FS = "|" }

{
  split( $3, array, /,/ )
  print $1 "," array[2]
  print $1 "," $2 "," array[2]
  print $1 "," $3
}

Armazene o script em algum lugar (por exemplo, parse.awk ) e verifique se ele é executável. Você pode então chamar o script em um arquivo CSV ou na entrada padrão e coletar seus resultados da seguinte forma:

$ echo '1,3917,3917,BGP=694|Ethernet=1610|LAG=3,Y' | parse.awk
1,3917,3917,BGP=694,Y
1,3917,3917,BGP=694,Ethernet=1610,Y
1,3917,3917,BGP=694,LAG=3,Y
    
por 06.09.2012 / 04:39