如何根据列K的长度对选项卡格式文件进行排序

时间:2010-06-23 02:05:46

标签: linux bash unix sorting awk

我有一个空格分隔的表格文件,如下所示:

>NODE 28 length 23 cov 11.043478 ACATCCCGTTACGGTGAGCCGAAAGACCTTATGTATTTTGTGG
>NODE 32 length 21 cov 13.857142 ACAGATGTCATGAAGAGGGCATAGGCGTTATCCTTGACTGG
>NODE 33 length 28 cov 14.035714 TAGGCGTTATCCTTGACTGGGTTCCTGCCCACTTCCCGAAGGACGCAC

如何使用Unix sort按DNA序列[ATCG]的长度对其进行排序?

4 个答案:

答案 0 :(得分:6)

如果长度在第4列,sort -n -k4应该可以解决问题。

如果答案需要计算出长度,那么您需要在排序之前寻找预处理步骤。也许python只打印出第7个空格分隔列的长度作为最后一列或第一列。

答案 1 :(得分:3)

这个流水线命令也会计算出长度。我的Unix有点生疏已经做了一段时间的其他事情

$ awk '{printf("%d %s\n", length($NF), $0)}' junk.lst|sort -n -k1,1|sed 's/^[0-9]* //'

答案 2 :(得分:1)

 awk '{print length($NF) $0|"sort -n"}' file | sed 's/^.[^>]*>/>/'

答案 3 :(得分:1)

使用Perl:

perl -e'
  print sort {
    length +($a =~ /(\S+)$/)[0] 
      <=>
    length +($b =~ /(\S+)$/)[0]
  } <>' infile

使用GNU awk:

WHINY_USERS= gawk 'END { 
  for (L in l) print l[L]
  }
{ 
  l[sprintf("%15s", length($NF))] = $0 
  }' infile