从blat输出,Mac与Linux语法中“查找和提取单击命中”?

时间:2014-07-14 02:20:50

标签: linux sed filtering blat

问题:输出文件" single_hits.txt"是空白的:

cut -f10 genome_v_trans.pslx | sort | uniq -c | grep '      1 ' | sed -e 's/      1 /\\\</' -e 's/$/\\\>/' > single_hits.txt

我已从Linux下载脚本以在Mac OSX 10.7.5上使用。由于它不起作用,因此需要进行一些更改。我有9个&#34; contigs&#34; DNA数据需要过滤以除去所有但独特的重叠群。 blat用于比较两个数据集并输出带有这些重叠群的.pslx文件,其工作原理如下:

964 0   0   0   0   0   3   292 +   m.1 1461    0   964 3592203 ...
501 0   0   0   0   0   3   468 -   m.1 1461    960 1461    5269699 ...
1168    0   0   0   1   2   7   1232    -   m.7292  1170    0   1170    5233270 ...

然后这个脚本应该删除相同的contigs,例如前两个(m.1)

1 个答案:

答案 0 :(得分:1)

这似乎适用于您提供的有限数据,

grep -v `awk '{print $10}' genome_v_trans.pslx | uniq -d` genome_v_trans.pslx

除非您希望它具有&lt;&gt;代替重复项,然后您可以替换重复的条目,然后您可以执行以下操作:

IFS=$(echo -en "\n\b") && for a in $(awk '{print $10}' genome_v_trans.pslx | uniq -d); do sed -i "s/$a/<>/g" genome_v_trans.pslx; done && unset IFS

结果:

964 0 0 0 0 0 3 292 +&lt;&gt; 1461 0 964 3592203 ......

501 0 0 0 0 0 3 468 - &lt;&gt; 1461 960 1461 5269699 ......

1168 0 0 0 1 2 7 1232 - m.7292 1170 0 1170 5233270 ......

或者如果您想在singlehits文件中使用它:

IFS=$(echo -en "\n\b") && for a in $(awk '{print $10}' dna.txt | uniq -d); do sed "s/$a/<>/g" dna.txt >> singlehits.txt; done && unset IFS

SINGLE_TMP=/tmp/_single_tmp_$$ && awk '{if ($10 == "<>") print}' singlehits.txt > "$SINGLE_TMP" && mv "$SINGLE_TMP" singlehits.txt && unset SINGLE_TMP

或更优雅:sed -ni '/<>/p' singlehits.txt

singlehits.txt:

964 0 0 0 0 0 3 292 +&lt;&gt; 1461 0 964 3592203 ......

501 0 0 0 0 0 3 468 - &lt;&gt; 1461 960 1461 5269699 ......