0

问题:输出文件“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 上使用的脚本。由于它不起作用,因此需要进行一些更改。我有九个 DNA 数据的“重叠群”,需要过滤以去除除唯一重叠群之外的所有数据。blat 用于比较两个数据集并输出带有这些 contig 的 .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 ...

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

4

1 回答 1

1

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

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

除非您希望它具有 <> 代替重复项,否则您可以 sed 替换重复项,然后您可以执行以下操作:

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 + <> 1461 0 964 3592203 ...

501 0 0 0 0 0 3 468 - <> 1461 960 1461 5269699 ...

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

或者,如果您希望在单次命中文件中使用它:

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

单打.txt:

964 0 0 0 0 0 3 292 + <> 1461 0 964 3592203 ...

501 0 0 0 0 0 3 468 - <> 1461 960 1461 5269699 ...

于 2014-08-15T09:47:24.323 回答