Shell-Script

將行轉置為列的 shell 或 python 腳本

  • May 27, 2014

我有一個大文件,其中包含如下數字:

1 2 3 4
5 6 7 8
9 9 9 9

我想把它轉換成

1 5 9
2 6 9
3 7 9
4 8 9

我在Google上搜尋解決方案,但這些解決方案在我的情況下根本不起作用。

該解決方案應該適合您。

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

測試

cat file

1 2 3 4
5 6 7 8
9 0 1 11

執行上述命令後,輸出為,

1 5 9
2 6 0
3 7 1
4 8 11

參考

https://stackoverflow.com/questions/1729824/transpose-a-file-in-bash

如果你可以使用perl

$ perl -anle '
   $l[$_] .= $F[$_] for 0..$#F;
   END {
       print join " ", split // for @l;
   }' file
1 5 9
2 6 9
3 7 9
4 8 9

或使用unpack

$ perl -nle '
   $i = 0;
   $l[$i++] .= $_ for unpack "(A2)*";
   END {
       print join " ", split // for @l;
   }' file
1 5 9
2 6 9
3 7 9
4 8 9

引用自:https://unix.stackexchange.com/questions/132122