2017-02-20 5 views
0

trfunction to transpose in bash but it's이 작동하지 않았습니다. 예 : 그들은 다음과 같이 할 수 있도록바쉬를 사용하는 열에서 조옮김 번호가 구별되지 않음

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'는 음역을 위해, 전치 아니다 ..... [효과적인 방법의 –

+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 

위의 해결책 중 하나가 아닌 라이너 형태도 다음과 같습니다.

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