行列を再フォーマットする方法

行列を再フォーマットする方法

次のファイルがあります。

column1   column2   column3  column4   column5
 5e-05   1e-05 0.00083   4e-05 0.00021
 6e-05   3e-05 1.00083   2e-05 1.00021

このように印刷して出力するには、再フォーマットする必要があります。

column1   5e-05      6e-05
column2   1e-05      3e-05
column3   0.00083    1.00083
column4   4e-05      2e-05
column5   0.00021    1.00021

使ってみよう

 tr ' ' '\n' | 
 pr -3t

しかし、これまで成功しませんでした。

解決策が見つかりました。

awk '
{ 
    for (i=1; i<=NF; i++)  {
        a[NR,i] = $i
    }
}
NF>p { p = NF }
END {    
    for(j=1; j<=p; j++) {
        str=a[1,j]
        for(i=2; i<=NR; i++){
            str=str" "a[i,j];
        } 
        print str 

      }
 }' file

ただし、出力は次のようになります。

column1 5e-05 5e-05
column2 1e-05 1e-05
column3 0.00083 0.00083
column4 4e-05 4e-05
column5 0.00021 0.00021

出力番号の形式を指定したいと思います。

答え1

質問に対する2つの答えが見つかりました。

最初は@steeldriverが提案したものです。

    tr -s ' ' '\n' < file | pr -3t

2つ目は、行列要素の転置に関する別の議論にあります。

awk '
{ 
    for (i=1; i<=NF; i++)  {
        a[NR,i] = $i
    }
}
 NF>p { p = NF }
END {    
     for(j=1; j<=p; j++) {
          str=a[1,j]
    for(i=2; i<=NR; i++){
        str=str" "a[i,j];
    } 
    print str 

  }
 }' file

関連情報