У меня есть следующий список в файле
больше файлов.ex
efifc1a
hygg4a
hdy5d
nhdw4s
wesf3a
fjfhyr
jfhg
gsfar
как добавить любой второй список после первого списка и любой третий список после второго списка следующим образом:
efifc1a nhdw4s jfhg
hygg4a wesf3a gsfar
hdy5d fjfhyr
решение1
Как насчет
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
Тестирование:
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
Если вы не зациклены на использовании awk, вы можете сделать это с помощьюcolumns
команда автогенаи transpose
команда, описанная здесьТранспонирование строк и столбцовнапример
columns -c3 < file.ex | tr -s ' ' '\t' | transpose -t
решение2
Если вы согласны иметь временные файлы, вы можете сделать это в два этапа с помощью awk
и paste
:
n=$(awk '{ print $0 > NR; close(NR) } END { print NR }' RS= file.ex)
paste $(seq $n)
Или в одной строке:
paste $(seq $(awk '{ print $0 > NR; close(NR) } END { print NR }' RS= file.ex))
Вывод в обоих случаях:
efifc1a nhdw4s jfhg
hygg4a wesf3a gsfar
hdy5d fjfhyr
Обратите внимание, что это создает пронумерованные файлы в текущем каталоге, поэтому будьте осторожны, чтобы не перезаписать другие файлы.