在linux中基于当前字符拆分文件

在linux中基于当前字符拆分文件,linux,bash,split,Linux,Bash,Split,我试图在论坛上找到这个问题的解决方案,但无法理解其中的一些解决方案 我在处理DNA数据,我有两个文件。 第一个文件(a)是包含所有序列头的文件。(姓名等) 每个标题都有自己的行。 例如: 第二个文件(b)包含这些标题的内容。 每行对应于第一个文件 GAGTTGGAAAGAG GCTGCCCTGAGATCGTNNNN GTGCAGTGATNNAGTG ACTG 我正在制作一个程序,搜索序列中的未知字母。 通常情况下,您会假设文件2中只有C T&G字符 我想制作两个文件: 同时具有头+序列(第一

我试图在论坛上找到这个问题的解决方案,但无法理解其中的一些解决方案

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

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

GAGTTGGAAAGAG
GCTGCCCTGAGATCGTNNNN
GTGCAGTGATNNAGTG
ACTG
我正在制作一个程序,搜索序列中的未知字母。 通常情况下,您会假设文件2中只有C T&G字符

我想制作两个文件:

  • 同时具有头+序列(第一个制表符=头,第二个制表符=序列)的文件,其中的条目只有一个CT和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
预期输出文件2(包含其他内容):


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

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

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

您需要发布两个输入文件(至少一个行样本)并发布预期的输出。您可以使用
tr-d“ACTG”
而不是
tr-d“a”| tr-d“T”…
您不需要管道
tr
这样的命令;只需删除所需的字符集。您也不需要
read/while
。当标题中包含空格时,只需执行
tr-dactg
失败,请将
$2
更改为
$NF
以进行修复。
>title1             GAGTTGGAAAGAG
>some other title   ACTG
>title2            GCTGCCCTGAGATCGTNNNN
>title3            GTGCAGTGATNNAGTG
paste header sequence | 
    awk '$NF ~ /^[ACTG]*$/ {print > "file1"; next }1'  > file2