2017-02-20 14 views
0

我試過trfunction to transpose in bash but it's無法正常工作。例如tr 'abcd' 'jkmn' ...移調編號未使用Bash列分隔

的想法是採取了一系列數字:

92121 
92911 

,並切換他們,使他們看起來像這樣:

99 
22 
19 
21 
11 

下面是測試數據集:

echo "92121 
     92911 
     29222 
     22222 
     22222 
     22222" > ~/Desktop/output.geno 

我知道我們可以用cut function分開數字。

我覺得我可以用

for var in 1:96 
do 
    tmp=$(cut -c var output.geno) 
    tr $tmp 
done 
+0

'tr'爲音譯,不轉..... –

+1

的[一種有效的方式可能的複製轉置在Bash中的文件](http://stackoverflow.com/questions/1729824/an-efficient-way-to-transpose-a-file-in-bash) –

+0

你有很多的語法錯誤。在'做'之前你不能有一個聲明。你在'cut'命令周圍缺少'$()'。 – Barmar

回答

1

@M。 Beausoleil:嘗試: 假設Input_file如下。

cat Input_file 
92121 
92911 
29222 
22222 
22222 
22222 

以下代碼可能會有所幫助。

awk '{for(i=1;i<=length($0);i++){array[i]=array[i]?array[i] substr($0,i,1):substr($0,i,1)};MAX=MAX>i?MAX:i} END{for(j=1;j<MAX;j++){print array[j]}}' Input_file 

以上解決方案的非單線形式也如下。

awk '{ 
     for(i=1;i<=length($0);i++){ 
             array[i]=array[i]?array[i] substr($0,i,1):substr($0,i,1) 
            }; 
     MAX=MAX>i?MAX:i 
    } 
    END{ 
       for(j=1;j<MAX;j++){ 
             print array[j] 
            } 
    } 
    ' Input_file 

輸出如下。

992222 
229222 
192222 
212222 
112222 
0

輸入

$ cat file 
92121 
92911 
29222 
22222 
22222 
22222 

輸出

$ awk ' 
{ 
    n=split($0,F,r) 
    for (i=1; i in F; i++) 
     a[NR,i] = F[i] 
} 
n>p { p = n } 
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 
992222 
229222 
192222 
212222 
112222