awk + como anexar lista em arquivo

1

Eu tenho a seguinte lista no arquivo

mais arquivo.ex

efifc1a
hygg4a
hdy5d


nhdw4s
wesf3a
fjfhyr



jfhg
gsfar

como acrescentar qualquer segunda lista após a primeira lista e qualquer terceira lista após a segunda lista, a seguir:

efifc1a   nhdw4s     jfhg
hygg4a    wesf3a     gsfar
hdy5d     fjfhyr
    
por yael 17.05.2016 / 20:51

2 respostas

2

Que tal

awk '
  BEGIN {FS="\n"; RS="\n\n+"}
  {for (i=1;i<=NF;i++) a[i] = a[i] == ""? $i : a[i]"\t"$i; next}
  END {for (i in a) print a[i]}
' file.ex

Teste:

awk '
>   BEGIN {FS="\n"; RS="\n\n+"}
>   {for (i=1;i<=NF;i++) a[i] = a[i] == ""? $i : a[i]"\t"$i; next}
>   END {for (i in a) print a[i]}
> ' file.ex
efifc1a nhdw4s  jfhg
hygg4a  wesf3a  gsfar
hdy5d   fjfhyr  

Se você não está preso ao uso do awk, pode fazê-lo usando autogen's columns command e o comando transpose descrito aqui Transpondo linhas e colunas

columns -c3 < file.ex | tr -s ' ' '\t' | transpose -t
    
por 17.05.2016 / 22:39
1

Se você aceitar arquivos temporários, poderá fazê-lo como um processo em duas etapas com awk e paste :

n=$(awk '{ print $0 > NR; close(NR) } END { print NR }' RS= file.ex)
paste $(seq $n)

Ou como um verso:

paste $(seq $(awk '{ print $0 > NR; close(NR) } END { print NR }' RS= file.ex))

Saída nos dois casos:

efifc1a nhdw4s  jfhg
hygg4a  wesf3a  gsfar
hdy5d   fjfhyr  

Note que isso cria arquivos numerados no diretório atual, portanto tome cuidado para não sobrescrever outros arquivos.

    
por 17.05.2016 / 22:27

Tags