ファイルに次のリストがあります
もっと見るファイル.ex
efifc1a
hygg4a
hdy5d
nhdw4s
wesf3a
fjfhyr
jfhg
gsfar
最初のリストの後に 2 番目のリストを追加し、2 番目のリストの後に 3 番目のリストを追加する方法は次のとおりです。
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の使用にこだわらないのであれば、次のようにすることもできます。autogenのcolumns
コマンドtranspose
ここで説明されているコマンド行と列の入れ替え例えば
columns -c3 < file.ex | tr -s ' ' '\t' | transpose -t
答え2
awk
一時ファイルの存在を受け入れる場合は、とを使用して 2 段階のプロセスとして実行できます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
注意: これにより、現在のディレクトリに番号付きのファイルが作成されるため、他のファイルを上書きしないように注意してください。