2015-01-05 4 views
1
cat sanger.* | tr '\-ACGT' '' | sed -e 's/\([[:digit:]]\)/\1 /g' 

1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 1 0 
0 2 2 0 0 0 0 2 2 2 2 0 2 0 0 0 0 0 2 2 2 0 2 0 0 0 0 0 0 0 2 
0 0 0 0 0 0 3 0 0 0 0 3 0 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 0 0 0 
0 0 0 4 4 0 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 

Это мой текущий вывод, теперь я хочу сортировать каждый столбец самостоятельно, поэтому все числа находятся на одной строке.Сортировка каждой колонки независимо

Как я могу это сделать?

ответ

0

Я не сортирую здесь, но извлекаю не-0 цифр.

Вот AWK фильтр, который «обновляет» каждые поля с единственным (на самом деле, последним) не «0» содержания он видит:

# short version 
awk '/./ { if (NF > maxNF) { maxNF=NF } 
      for(i=1;i<=NF;i++) { if ($i!="0") { result[i]=$i } } 
     } 
    END { for(i=1;i<=maxNF;i++) { printf "%s ",result[i] } } 
    ' 

# expanded version (ie, the same as above, with different indentation to mhelp reading) 
awk '/./ { if (NF > maxNF) 
       { maxNF=NF } 
      for(i=1;i<=NF;i++) 
       { if ($i!="0") 
        { result[i]=$i } 
       } 
     } 
    END { for(i=1;i<=maxNF;i++) 
       { printf "%s ",result[i] 
       } 
     } 
    ' 

так, если я вставить отправил результат в этот фильтр :

echo " 
1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 1 0 
0 2 2 0 0 0 0 2 2 2 2 0 2 0 0 0 0 0 2 2 2 0 2 0 0 0 0 0 0 0 2 
0 0 0 0 0 0 3 0 0 0 0 3 0 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 0 0 0 
0 0 0 4 4 0 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 
" | awk '/./ { if (NF > maxNF) { maxNF=NF } 
       for(i=1;i<=NF;i++) { if ($i!="0") { result[i]=$i } } 
      } 
     END { for(i=1;i<=maxNF;i++) { printf "%s ",result[i] } } 
     ' 

выводит:

1 2 2 4 4 1 3 2 2 2 2 3 2 4 3 4 1 3 2 2 2 1 2 1 3 4 1 1 1 1 2 

(примечание: с дополнительным "" в конце концов, здесь ...)

Замечание о предупреждении: очень OLD-версия оригинального awk (и, возможно, некоторого nawk) ограничена 99 полями ... (Редко встречается в настоящее время. И если вы используете версию GNU, вы будете в порядке)

+0

Это действительно хороший ответ, но это также можно сделать с помощью sed или sort, потому что мы не научились использовать awk, поэтому мы не можем использовать это во время экзаменов , – fangio

Смежные вопросы