我试图在论坛上找到这个问题的解决方案,但无法理解其中的一些解决方案。
我正在处理 DNA 数据,我有 2 个文件。 第一个文件 (a) 是包含所有序列标题的文件。 (姓名等) 每个标题都有自己的行。 示例:
>title1
>title2
>title3
>some other title
第二个文件 (b) 包含这些 header 的内容。 每行对应第一个文件。
GAGTTGGAAAGAG
GCTGCCCTGAGATCGTNNNN
GTGCAGTGATNNAGTG
ACTG
我正在制作一个程序来搜索序列中的未知字母。 通常你会假设文件 2 中只有字符 A C T & G。
我想制作 2 个文件:
- 同时包含标题和序列(第一个选项卡 = 标题,第二个选项卡 = 序列)的文件,其中的条目仅包含 A C T 和 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
最佳答案
先把数据用paste拼在一起,再用awk分开:
paste header sequence |
awk '$NF ~ /^[ACTG]*$/ {print > "file1"; next }1' > file2
粘贴将数据放入两列,awk
检查最后一列是否只包含字母 ACTG
。如果是,该行将写入文件 file1
。 (也将打印空序列。)如果不是,则该行将写入 file2
。
关于linux - 根据存在的字符在linux中拆分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464079/