Linux下同时对字母和数字排序

最近在用Variation graph toolkit(简称vg,一款构建泛基因组,并用构建好的泛基因组来call变异的软件),想cat两个vcf文件并根据染色体号(CHROM)和起始位置(POS)进行排序,也即:

cat $vcf1 $vcf2 |sort -k 1n -k 2n >$vcf

但是结果会是X和Y在最前面,

# ...为省略内容
#CHROM  POS  ......
X  1979  ......
X  19469  ......
......

而我希望的顺序是1-22,然后是X和Y。
在网上查了一下,没找到sort可以用的参数,然后想用awk去做,最开始是

for i in `seq 1 22` X Y;do awk '{if($1 == '$i')print $0}' $vcf ;done >$sorted_vcf

这里有个小Tips:
要想在awk中引用for循环的变量,需要在变量$i两边加上单引号,即

# ...为省略内容
for i in ... ; do awk '...'$i'...' ;done

但是tail了一下,发现没有抓到X和Y,猜测是字符串和数字的原因。

最后用如下代码成功实现:

for i in `seq 1 22` X Y;do awk '{if($1 == "'$i'")print $0}' $vcf ;done >$sorted_vcf

注意,sort这步依然是需要做的。

如果有更好的方法,还请告诉我哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,294评论 2 25
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,870评论 0 6
  • 寻找trio家系新发突变位点 http://wintervar.wglab.org/错义突变评估网站突变reads...
    Hocchan_7阅读 4,173评论 0 51
  • 系统巡检脚本:Version 2016.08.09 ############################ 系统...
    NamasAmitabha阅读 1,390评论 0 0
  • 1、Nginx日志分析日志格式:'$remote_addr - $remote_user [$time_local...
    运维前线阅读 778评论 0 4