我的文件中有以下列表
更多文件.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
请注意,这会在当前目录中创建编号文件,因此请注意不要覆盖其他文件。