Formato de várias colunas para o formato de 2 colunas

0

Eu tenho um arquivo assim:

1 a,b,c
2 z
3 d,f

e gostaria de ter este formato:

1 a
1 b
1 c
2 z
3 d
3 f
    
por Oracle 12c 09.02.2016 / 19:22

4 respostas

1

Solução Awk:

$ cat file
1 a,b,c
2 z
3 d,f

$ awk '{ gsub(",", "\n"$1" "); print; }' file
1 a
1 b
1 c
2 z
3 d
3 f
    
por 09.02.2016 / 22:45
0

Se a sua entrada for tão simples quanto parece, então aqui está um script de bash fazendo as coisas que os shell scripts não fazem bem em:

#!/usr/bin/env bash
declare -a col2
while read col1 rest
do
  IFS=, read -a col2 <<< "$rest"
  for value in ${col2[*]}
  do
    printf "%s %s\n" "$col1" "$value"
  done
done < input

Existem maneiras melhores de fazer isso ( read -a é bash-specific e não POSIX); existem outras maneiras de fazer isso (awk, perl). Se seus dados forem mais complicados, (1 a,"b,c",d) ou (1 a,b\,c,d) , esse script provavelmente não fará o que você deseja.

    
por 09.02.2016 / 21:08
0

Por favor, tente:

sild@:/tmp $ cat test
1 a,b,c
2 z
3 d,f
sild@:/tmp $ cat test.sh 
#!/bin/bash
separator=","
cat test | while read line; do
 head="'echo $line | cut -d" " -f1'"
 IFS="$separator" read -ra nodes <<< "'echo $line | cut -d" " -f2-'"
 for i in "${nodes[@]}"; do
         echo $head $i
     done
 done
sild@:/tmp $ ./test.sh 
1 a
1 b
1 c
2 z
3 d
3 f
sild@:/tmp $ 
    
por 09.02.2016 / 22:48
0

Solução de Perl:

perl -ane 'print map "$F[0] $_\n" ,split(",",$F[1])' file
1 a
1 b
1 c
2 z
3 d
3 f
    
por 09.02.2016 / 23:10