最近在用Variation graph toolkit(簡稱vg,一款構(gòu)建泛基因組,并用構(gòu)建好的泛基因組來call變異的軟件),想cat兩個vcf文件并根據(jù)染色體號(CHROM)和起始位置(POS)進行排序,也即:
cat $vcf1 $vcf2 |sort -k 1n -k 2n >$vcf
但是結(jié)果會是X和Y在最前面,
# ...為省略內(nèi)容
#CHROM POS ......
X 1979 ......
X 19469 ......
......
而我希望的順序是1-22,然后是X和Y。
在網(wǎng)上查了一下,沒找到sort可以用的參數(shù),然后想用awk去做,最開始是
for i in `seq 1 22` X Y;do awk '{if($1 == '$i')print $0}' $vcf ;done >$sorted_vcf
這里有個小Tips:
要想在awk中引用for循環(huán)的變量,需要在變量$i兩邊加上單引號,即
# ...為省略內(nèi)容
for i in ... ; do awk '...'$i'...' ;done
但是tail了一下,發(fā)現(xiàn)沒有抓到X和Y,猜測是字符串和數(shù)字的原因。
最后用如下代碼成功實現(xiàn):
for i in `seq 1 22` X Y;do awk '{if($1 == "'$i'")print $0}' $vcf ;done >$sorted_vcf
注意,sort這步依然是需要做的。
如果有更好的方法,還請告訴我哦。