2017-02-20 1 views
0

trfunction to transpose in bash but it'sが機能しませんでした。例えば彼らはこのようになりますようにBashを使用して列内で転置番号が区切られていない

92121 
92911 

し、それらを切り替える::

ここ
99 
22 
19 
21 
11 

は、テストデータセットである:tr 'abcd' 'jkmn'は...

アイデアは、一連の数字を取ることです

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'はTRANSLITERATEため、転置ない..... [効率的な方法の –

+1

可能な複製を移調しますBashのファイル](http://stackoverflow.com/questions/1729824/an-efficient-way-to-transpose-a-file-in-bash) –

+0

多くの構文エラーがあります。 'do'の前に文を書くことはできません。 '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 

上記の解決策のNON-oneライナーフォームも以下のとおりです。

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 
関連する問題