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 
語文 數學 語文 數學 語文 數學 英語 
張三 張三 李四 李四 王五 王五 王五 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM