最近在用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這步依然是需要做的。
如果有更好的方法,還請告訴我哦。