2017-02-20 24 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

У вас много синтаксических ошибок. У вас не может быть утверждения до '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