awk + wie man eine Liste in eine Datei anhängt

awk + wie man eine Liste in eine Datei anhängt

Ich habe die folgende Liste in der Datei

mehr file.ex

efifc1a
hygg4a
hdy5d


nhdw4s
wesf3a
fjfhyr



jfhg
gsfar

So fügen Sie eine zweite Liste nach der ersten Liste und eine dritte Liste nach der zweiten Liste wie folgt an:

efifc1a   nhdw4s     jfhg
hygg4a    wesf3a     gsfar
hdy5d     fjfhyr

Antwort1

Wie wäre es mit

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

Testen:

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  

Wenn Sie nicht auf die Verwendung von awk angewiesen sind, können Sie dies auch mitAutogens columnsBefehlund dem transposehier beschriebenen BefehlZeilen und Spalten transponierenz.B

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

Antwort2

Wenn Sie mit der Verwendung temporärer Dateien einverstanden sind, können Sie dies in einem zweistufigen Prozess mit awkund tun paste:

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

Oder als Einzeiler:

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

Ausgabe in beiden Fällen:

efifc1a nhdw4s  jfhg
hygg4a  wesf3a  gsfar
hdy5d   fjfhyr  

Beachten Sie, dass hierdurch nummerierte Dateien im aktuellen Verzeichnis erstellt werden. Achten Sie daher darauf, keine anderen Dateien zu überschreiben.

verwandte Informationen