如何使用awk在while-read循环中搜索字符串

如何使用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

我想循环浏览file1,它有两列。每列都有一个字符串,我想用它在包含18列的数据帧文件(file2)中搜索。我想从file2中选择两列中都有file1字符串的行,以创建一个新文件

file1(标签分隔的文件,大约有150行,没有标题)

file2(标签分隔的文件,大约有150万行,有一个标题) 共有18列。列18具有来自文件1的区域信息,列15具有来自文件1的主题信息

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