Awk 我试图比较两个fastq文件(成对读取),打印另一个文件的行号n

Awk 我试图比较两个fastq文件(成对读取),打印另一个文件的行号n,awk,pattern-matching,fastq,Awk,Pattern Matching,Fastq,我试图比较两个fastq readspaired读取,以便将file1.fastq中模式匹配的行号与file2.fastq进行比较。我想打印文件2.fastq中相同位置或行号上的内容。我正试图通过awk做到这一点。如果我的模式匹配在文件1的第200行,我想看看文件2的第200行有什么。欢迎对此提出任何建议。一般来说,您需要以下表格: awk ' { getline line_2 < "file2" } /pattern/ { print FNR, line_2 } ' fi

我试图比较两个fastq readspaired读取,以便将file1.fastq中模式匹配的行号与file2.fastq进行比较。我想打印文件2.fastq中相同位置或行号上的内容。我正试图通过awk做到这一点。如果我的模式匹配在文件1的第200行,我想看看文件2的第200行有什么。欢迎对此提出任何建议。

一般来说,您需要以下表格:

awk '
    { getline line_2 < "file2" }
    /pattern/ { print FNR, line_2 }
' file1

我使用CtrlA作为字段分隔符,假设字符没有出现在您的文件中。

我的新手尝试到目前为止

zcat file1.fastq.gz|awk '~/pattern/{print NR;}'>matches.csv

awk 'FNR==NR{a[$1]=$0;next;}(FNR in a)' matches.csv file2.fastq.gz

我的理解是你有三份档案。一个模式文件和两个数据文件。您希望在数据文件1中找到模式的行号,并在数据文件2中找到相应的行。如果您能够澄清它,并可能提供输入文件和预期输出,您将获得更多帮助

救命啊

awk -F: -vOFS=: 'NR==FNR{lines[$1]=$0;next} FNR in lines{print lines[FNR],$0}' <(grep -nf pattern data1) data2

样本输入和样本输出将非常有用。正如你目前的尝试一样。不要说这里的人帮不了你,但类似的问答网站可能会给出更好的答案。据我所知,他/她正在寻找文件1中的模式。如果他找到了他要找的东西,他想看看在文件2中的相同位置有什么。所以像ifline_1~/图案/打印线_2这样的东西可以在这里使用。@Cabbie407是的!你是对的。我正在文件1中查找模式匹配。我想得到一个匹配的行号列表。然后,我想找到文件2中相同行号的内容。我有数千个匹配行号,因此ifline_1~/pattern/print line_2不会work@glenn杰克曼:这是一个很好的方法,但我似乎没有工作。它只给了我行号,没有内容,但当我检查文件2中的第一个模式匹配行时,我确实看到了内容。是否有其他方法可以尝试。您需要显示一些示例输入和所需的输出。你冗长的描述是不够的。请编辑您的问题以提供所需的数据。@glenn jackman成功了!原来我只是有一个小故障,在粘贴由于我的压缩文件。谢谢你的帮助。请不要理会我含糊不清的评论!我只有两个文件file1和file2。在我的尝试中,我从文件1创建了第三个模式匹配文件,并将其通过管道传输到文件2。我不确定这是否是一个明智的方法,但我只是试着看看它是否有效。我想你还不明白格伦·杰克曼的解决方案是什么。同时并行读取文件1和文件2。不需要保存行号,因为文件2中的实际行始终在内存中。在变量行_2中。因此,如果在文件1中找到了某些内容,则可以直接打印文件2中的相应行。或者我还是不明白。
awk -F: -vOFS=: 'NR==FNR{lines[$1]=$0;next} FNR in lines{print lines[FNR],$0}' <(grep -nf pattern data1) data2
1:s1265e:s1265e
2:s28629e:s28629e
3:s6630e:s6630e
4:s24530e:s24530e
5:s23216e:s23216e
6:s25985e:s25985e