awk + cómo agregar una lista en un archivo

awk + cómo agregar una lista en un archivo

Tengo la siguiente lista en el archivo.

más archivo.ex

efifc1a
hygg4a
hdy5d


nhdw4s
wesf3a
fjfhyr



jfhg
gsfar

cómo agregar cualquier segunda lista después de la primera lista y cualquier tercera lista después de la segunda lista lo siguiente:

efifc1a   nhdw4s     jfhg
hygg4a    wesf3a     gsfar
hdy5d     fjfhyr

Respuesta1

Qué tal si

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

Pruebas:

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  

Si no estás atascado en el uso de awk, puedes hacerlo usandocolumnscomando de autogeny el transposecomando descrito aquíTransponer filas y columnasp.ej

columns -c3 < file.ex | tr -s ' ' '\t' | transpose -t

Respuesta2

Si acepta tener archivos temporales, puede hacerlo como un proceso de dos pasos con awky paste:

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

O como una sola línea:

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

Salida en ambos casos:

efifc1a nhdw4s  jfhg
hygg4a  wesf3a  gsfar
hdy5d   fjfhyr  

Tenga en cuenta que esto crea archivos numerados en el directorio actual, así que tenga cuidado de no sobrescribir otros archivos.

información relacionada