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 columns
Befehlund dem transpose
hier 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 awk
und 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.