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