shell腳本,awk實現行列轉換

[root@localhost study]# cat file
張三   語文  81
張三   數學  81
李四   語文  76
李四   數學  90
王五   語文  81
王五   數學  100
王五   英語  90



怎麼實現爲下面的排序???
81     81    76    90    81    100   90
語文   數學  語文  數學  語文  數學  英語
張三   張三  李四  李四   王五 王五   王五

如下是思路分析:

張三   語文  81
張三   數學  81
李四   語文  76
李四   數學  90
王五   語文  81
王五   數學  100
王五   英語  90

for(i=1;i<=NF;i++)a[NR,i]=$i
[NR i]=$i
a[1,1]=$i=$1=1 a[1,2]=$i=$1=2 a[1,3]=$i=$1=3 
a[2,1]=$i=$1=1 a[2,2]=$i=$1=2 a[2.3]=$i=$1=3 
a[3,1]=$i=$1=1 a[3,2]=$i=$1=2 a[3,3]=$i=$1=3  
a[4,1]=$i=$1=1 a[4,2]=$i=$1=2 a[4.3]=$i=$1=3 
a[5,1]=$i=$1=1 a[5,2]=$i=$1=2 a[5,3]=$i=$1=3 
a[6,1]=$i=$1=1 a[6,2]=$i=$1=2 a[6,3]=$i=$1=3 
a[7,1]=$i=$1=1 a[7,2]=$i=$1=2 a[7,3]=$i=$1=3 
這些數組取值和上面一一對應


想要實現下面排序
81     81    76    90    81    100   90
語文   數學  語文  數學  語文  數學  英語
張三   張三  李四  李四   王五 王五   王五

那麼他們對應的數組變量是:
a[1,3] a[2.3] a[3,3]  a[4.3] a[5,3] a[6,3] a[7.3]
a[1,2] a[2,2] a[3,2]  a[4,2] a[5,2] a[6,2] a[7,2]
a[1,1] a[2,1] a[3,1]  a[4,1] a[5,1] a[6,1] a[7,1]
能夠使用2個for循環控制好對應的數組下表,便可取出對應的值

for(i=NF;i>=1;i--) 輸出 i= 3 2 1  (3>i>1)

for(j=1;j<=NR;j++)  輸出 j= 1 2 3 4 5 6 7 (1<j<7)

當i=3時j=1,2,3,4,5,6,7
a[j,i]
輸出 
a[1,3] a[2,3] a[3,3] a[4,3] a[5,3] a[6,3] a[7,3]


當i=2時j=1,2,3,4,5,6,7
a[j,i]
輸出 
a[1,2] a[2,2] a[3,2]  a[4,2] a[5,2] a[6,2] a[7,2]


當i=2時j=1,2,3,4,5,6,7
a[j,i]
輸出 
a[1,1] a[2,1] a[3,1]  a[4,1] a[5,1] a[6,1] a[7,1]


[root@localhost study]# cat file|awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=NF;i>=1;i--){for(j=1;j<=NR;j++){printf a[j,i]" "}print xxoo}}'
81 81 76 90 81 100 90 
語文 數學 語文 數學 語文 數學 英語 
張三 張三 李四 李四 王五 王五 王五 
相關文章
相關標籤/搜索