1

我试图在论坛上找到解决此问题的方法,但也无法理解某些解决方案。

我正在处理 DNA 数据,我有 2 个文件。第一个文件 (a) 是包含所有序列头的文件。(名称等)每个标题都有自己的行。例子:

>title1
>title2
>title3
>some other title

第二个文件 (b) 包含这些标题的内容。每行对应于第一个文件。

GAGTTGGAAAGAG
GCTGCCCTGAGATCGTNNNN
GTGCAGTGATNNAGTG
ACTG

我正在制作一个在序列中搜索未知字母的程序。通常你会假设文件 2 中只有字符 ACT 和 G。

我想做2个文件:

  • 具有标题 + 序列(第一个选项卡 = 标题,第二个选项卡 = 序列)的文件,其中只有 ACT 和 G 的条目
  • 一个同时具有标题 + 序列(第一个选项卡 = 标题,第二个选项卡 = 序列)的文件,只是这次我们只有包含其他字母的条目。(例如 N)

到目前为止我试过这个:

while read line; do
    echo "$line" | tr -d "A" | tr -d "C" | tr -d "T" | tr -d "G" | tr -d "\n" | wc -c
done <sequenceOnly.txt >unkownLines.txt

这计算未知字符在 (b) 文件中出现的频率。如果此值大于 0,我想使用此行将标题 + 序列放置在 unknownLines.txt 文件中,但我被卡住了:/

预期的输出文件 1(只有 ACTG):

>title1             GAGTTGGAAAGAG
>some other title   ACTG

预期的输出文件 2(有其他东西):

>title2            GCTGCCCTGAGATCGTNNNN
>title3            GTGCAGTGATNNAGTG
4

1 回答 1

2

首先,将数据用 paste 放在一起,然后用 awk 分开:

paste header sequence | 
    awk '$NF ~ /^[ACTG]*$/ {print > "file1"; next }1'  > file2

粘贴将数据放入两列,并awk检查最后一列是否仅包含字母ACTG。如果是,则将该行写入文件file1。(也将打印空序列。)如果没有,则将行写入file2.

于 2013-01-22T17:29:28.847 回答