我有一个非常大的文本文件myReads.sam,它看起来像这样:
J00118:315:HMJWTBBXX:4:1118:21684:2246 4 * 0 0 * * 0 0 CR:Z:TTTGTCATCTGTTTGT
J00118:315:HMJWTBBXX:4:2211:19532:14449 4 * 0 0 * * 0 0 CR:Z:TATGTCATCTTTCCTC
我还有另一个500行的文本文件myIDs.txt,它看起来像这样:
CR:Z:TTTGTCATCTGTTTGT
CB:Z:CTACCCAGTCGACTGC
QT:Z:AAFFFJJJ
我想创建第三个文本文档myFilteredReads.sam,它排除任何不包含myIDs.txt中字符串之一的行。因此,例如,如果我使用上面的myReads.sam和myIDs.txt代码片段应用此过滤器,新文件将如下所示:
J00118:315:HMJWTBBXX:4:1118:21684:2246 4 * 0 0 * * 0 0 CR:Z:TTTGTCATCTGTTTGT
我知道如果我只过滤一个字符串(例如‘'CR:Z:TTTGTCATCTGTTTGT'),我可以这样使用awk:
cat myReads.sam | awk '!/CR:Z:TTTGTCATCTGTTTGT/' > myPartiallyFilteredReads.sam
不过,我不确定如何命令awk将引号中的部分替换为文件的每一行。我想我可以尝试遍历这些文件:
cat myIDs.txt | awk 'BEGIN {i = 1; do { !/i/; ++i } while (i < 500) }' myReads.sam > myFilteredReads.sam
对我不起作用的...but。
有什么建议吗?提前谢谢。
发布于 2018-06-07 03:40:22
main是包含内容的文件
str是包含“感兴趣的字符串”的文件
out是输出文件
#!/bin/bash
while read line; do
grep ${line} main >> out
done < str
https://stackoverflow.com/questions/50728208
复制相似问题