2017-02-20 3 views
0

Ich habe versucht, die trfunction to transpose in bash but it's funktioniert nicht. z.B. tr 'abcd' 'jkmn' ...Transponieren Nummer nicht in Spalten mit Bash

Die Idee ist, eine Reihe von Zahlen zu nehmen:

92121 
92911 

und sie schalten, so dass sie wie folgt aussehen würde:

99 
22 
19 
21 
11 

Hier ist ein Test-Datensatz:

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

Ich weiß, wir können Zahlen mit der cut function trennen.

Ich fühle, dass ich

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

'tr' für transkribieren ist, nicht umsetzen ..... –

+1

Mögliche Duplikat [effizient transponieren eine Datei in Bash] (http://stackoverflow.com/questions/1729824/an-efficient-way-to-transpose-a-file-in-bash) –

+0

Sie haben viele Syntaxfehler. Sie können keine Aussage vor dem 'tun' haben. Sie vermissen die '$()' um den 'cut' Befehl. – Barmar

Antwort

1

@M nutzen könnten. Beausoleil: Versuchen Sie: Nehmen wir an, Input_file ist wie folgt.

cat Input_file 
92121 
92911 
29222 
22222 
22222 
22222 

Folgende Code könnte in der gleichen helfen.

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-ein Liner Form der obigen Lösung auch wie folgt.

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 

Die Ausgabe wird wie folgt sein.

992222 
229222 
192222 
212222 
112222 
0

Eingang

$ cat file 
92121 
92911 
29222 
22222 
22222 
22222 

Ausgabe

$ 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 
Verwandte Themen