awk + как добавить список в файл

awk + как добавить список в файл

У меня есть следующий список в файле

больше файлов.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  

Обратите внимание, что это создает пронумерованные файлы в текущем каталоге, поэтому будьте осторожны, чтобы не перезаписать другие файлы.

Связанный контент