垂直配列データを水平配列データに変換

垂直配列データを水平配列データに変換

それぞれ128行と5列の25行列を持つファイルがあります。各行列は垂直方向に1つずつ配置される。このように

ファイル入力(ファイル1):

Array1
Array2
Array3
...
Array25

各配列を水平に配置したい。そう(ファイル2)

Array1  Array2  Array3 ... Array25

私は次のコマンドを試しました。

pr -25t -w 4000 file1 > file2

ところで私が望む通りにはなりませんね。

ベストアンサー1

それぞれ3行の配列を含むこのテストファイルを考えてみましょう。

$ cat File
1 2
3 4
5 6
a b
c d
e f
A B
C D
E F

それでは配列を接続してみましょう。

$ awk -v nr=3 '{a[NR]=$0} END{for (i=1;i<=nr;i++) {for (j=i;j<=NR;j+=nr) printf "%s ",a[j]; print""}}' File
1 2 a b A B 
3 4 c d C D 
5 6 e f E F 

データファイル内の各配列には128行があります。この場合は、以下を実行します。

awk -v nr=128 '{a[NR]=$0} END{for (i=1;i<=nr;i++) {for (j=i;j<=NR;j+=nr) printf "%s ",a[j]; print""}}' File

どのように動作しますか?

  • -v nr=128

    これにより、変数がnr各配列の行数に設定されます。

  • a[NR]=$0

    NR行番号です。各行を配列として保存しますa

  • END{for (i=1;i<=nr;i++) {for (j=i;j<=NR;j+=nr) printf "%s ",a[j]; print""}}

    すべての行を読んだ後、目的の形式で書き換えられます。

    iこれを行うには、で始まり、i=1で終わる変数を繰り返しますi=nr。それぞれにi新しい行を印刷しますi。各値に対して、i新しいファイルの行に属する古いファイルの行数を繰り返します。jji

多様性

初心者にとっては読みにくくなりますが、三項文を使用するとフォーマットを少し改善できます。

$ awk -v nr=3 '{a[NR]=$0} END{for (i=1;i<=nr;i++) for (j=i;j<=NR;j+=nr) printf "%s%s",a[j],(j+nr<=NR?" ":"\n")}' File
1 2 a b A B 11 22
3 4 c d C D 33 44
5 6 e f E F 55 66

j+nr<=NR?" ":"\n"三項門。空白を返す場合j+nr<=NR。それ以外の場合は改行文字を返します。

おすすめ記事