如何使用awk在while-read循环中搜索字符串
我想循环浏览file1,它有两列。每列都有一个字符串,我想用它在包含18列的数据帧文件(file2)中搜索。我想从file2中选择两列中都有file1字符串的行,以创建一个新文件 file1(标签分隔的文件,大约有150行,没有标题) file2(标签分隔的文件,大约有150万行,有一个标题) 共有18列。列18具有来自文件1的区域信息,列15具有来自文件1的主题信息如何使用awk在while-read循环中搜索字符串,awk,Awk,我想循环浏览file1,它有两列。每列都有一个字符串,我想用它在包含18列的数据帧文件(file2)中搜索。我想从file2中选择两列中都有file1字符串的行,以创建一个新文件 file1(标签分隔的文件,大约有150行,没有标题) file2(标签分隔的文件,大约有150万行,有一个标题) 共有18列。列18具有来自文件1的区域信息,列15具有来自文件1的主题信息 chr start end period copyNum consensusSize perMatch perI
chr start end period copyNum consensusSize perMatch perIndel score A C G T entropy motif sequence ID region
chr1 15798 15822 3 8.3 3 77 0 29 0 40 20 40 1.52 TGC TGCTCCTGCTCCTTCTGCTGCTGCT chr1_15798_15822_TGC Exon
chr9 140196426 140196441 3 5.3 3 84 0 25 0 31 62 6 1.2 GGC GGCGGCGGCTGCGGCG chr9_140196426_140196441_GGC 5' UTR
chr1 19282560 19282579 3 6.7 3 76 0 26 5 40 25 30 1.77 CTG CTGCTGCTGCTCCAGCTGCT chr1_19282560_19282579_CTG Exon
chr8 131028679 131028694 3 5.3 3 100 0 32 0 62 37 0 0.95 GCC GCCGCCGCCGCCGCCG chr8_131028679_131028694_GCC 5' UTR
预期的输出将包括file2中的所有列,但仅包括两个字符串上与file1匹配的行。从这个示例中,file2的第3行和第4行应该在输出中
当我不通过循环手动执行时,它工作得很好。但一旦它进入循环,我就会得到一个空的输出文件。这就是我迄今为止所尝试的:
while read REGION MOTIF; do
awk '$18 == "'${REGION}'" && $15 == "'${MOTIF}'"' file2 >> output.txt
done < file1.txt
I get the following errors:
awk: cmd. line:1: ($18 == "Exon" && $15 == "CAG
awk: cmd. line:1: ^ unterminated string
awk: cmd. line:1: ($18 == "5'" && $15 == "UTR
awk: cmd. line:1: ^ unterminated string
您可以尝试使用此
awk
,它在查看file1
时,存储region
数组中第一列和motif
数组中第二列的所有值。稍后,如果在区域
数组中找到$18
,并且在motif
数组中找到$15
,我们将打印文件2
中的记录:
awk-F'\t''NR==FNR{region[$1];motif[$2];next}
地区售价18美元,motif'file1 file2售价15美元
输出:
chr1 15798 15822 3 8.3 3 77 0 29 0 40 20 40 1.52 CTG tgctcctgctccttgctgctgct chr1\u 15798\u 15822\u TGC外显子
文件1(使用
选项卡分隔文件必须将字段分隔符设置为tab@KamilCuk-尝试过,但没有改变任何内容我仍然得到一个空白输出文件…请提供file2
中的示例输入,以便我可以根据需要进行测试和调整。我编辑了问题以添加file2的示例,感谢您在file2中的帮助您拥有TGC
但是在file1
中,您有CTG
,因此存在一个不匹配的问题,问题是我必须将dos2unix转换为file1.Facepalm表情符号!不过感谢这段代码,它帮助解决了UTR区域名称中单引号的问题。也比我尝试的方式更快。
while read REGION MOTIF; do
awk '$18 == "'${REGION}'" && $15 == "'${MOTIF}'"' file2 >> output.txt
done < file1.txt
I get the following errors:
awk: cmd. line:1: ($18 == "Exon" && $15 == "CAG
awk: cmd. line:1: ^ unterminated string
awk: cmd. line:1: ($18 == "5'" && $15 == "UTR
awk: cmd. line:1: ^ unterminated string
while read REGION MOTIF; do
awk -v a="$REGION" -v b="$MOTIF" '($18 == a && $15 == b)' file2.txt >> output.txt
done < file1.txt
awk '($18 == "Exon" && $15 == "CTG")' file2.txt > output.txt
or
awk -v a="Exon" -v b="CAG" '($18 == a && $15 == b)' file2.txt > output.txt