awk将文件1与文件2匹配并输出匹配项

awk将文件1与文件2匹配并输出匹配项,awk,Awk,我正在尝试使用awk将file1与file2匹配,并在单独的文件中打印匹配的行。文件1是~4MB,我得到下面的错误,我似乎无法修复它。谢谢:) awk:超出程序限制:最大字段数大小=32767 FILENAME=“sort.2.txt”FNR=1 NR=1 File1 chr1:3063265-3063458 AVP:exon.3 8.55959 chr1:947806-947967 RSPO4:exon.3 246.54 chr2:12758246-12758422 CTD-2192J16.2

我正在尝试使用
awk
将file1与file2匹配,并在单独的文件中打印匹配的行。文件1是~4MB,我得到下面的错误,我似乎无法修复它。谢谢:)

awk:超出程序限制:最大字段数大小=32767 FILENAME=“sort.2.txt”FNR=1 NR=1

File1

chr1:3063265-3063458 AVP:exon.3 8.55959
chr1:947806-947967 RSPO4:exon.3 246.54
chr2:12758246-12758422 CTD-2192J16.22:exon.2;MAN2B1:exon.1;MAN2B1:exon.20;MAN2B1:exon.22 221.483
chr2:57975642-57975745 KIF5A:exon.1;KIF5A:exon.23;KIF5A:exon.26 222.932
文件2

AVP
KIF5A
所需输出

chr1:3063265-3063458 AVP:exon.3 8.55959
chr2:57975642-57975745 KIF5A:exon.1;KIF5A:exon.23;KIF5A:exon.26 222.932
你可以试试

awk '
    FNR==NR{d[$0]; next;}          #Store each key to find, from file2
    {                              #for each line in file1
        for(k in d){               #for each key in d (file2)
            pat="(^|;)"k":";       #pattern to search (regular expression)
            if($2 ~ pat){
                print;             #print if match with RE
                break;
            }
        }
    }' file2 file1
你得到

chr1:3063265-3063458 AVP:exon.3 8.55959 chr2:57975642-57975745 KIF5A:exon.1;KIF5A:exon.23;KIF5A:exon.26 222.932 chr1:3063265-3063458 AVP:外显子3 8.55959 chr2:57975642-57975745KIF5A:外显子1;KIF5A:外显子23;KIF5A:外显子26 222.932 你可以试试

awk '
    FNR==NR{d[$0]; next;}          #Store each key to find, from file2
    {                              #for each line in file1
        for(k in d){               #for each key in d (file2)
            pat="(^|;)"k":";       #pattern to search (regular expression)
            if($2 ~ pat){
                print;             #print if match with RE
                break;
            }
        }
    }' file2 file1
你得到

chr1:3063265-3063458 AVP:exon.3 8.55959 chr2:57975642-57975745 KIF5A:exon.1;KIF5A:exon.23;KIF5A:exon.26 222.932 chr1:3063265-3063458 AVP:外显子3 8.55959 chr2:57975642-57975745KIF5A:外显子1;KIF5A:外显子23;KIF5A:外显子26 222.932 你可以试试

awk '
    FNR==NR{d[$0]; next;}          #Store each key to find, from file2
    {                              #for each line in file1
        for(k in d){               #for each key in d (file2)
            pat="(^|;)"k":";       #pattern to search (regular expression)
            if($2 ~ pat){
                print;             #print if match with RE
                break;
            }
        }
    }' file2 file1
你得到

chr1:3063265-3063458 AVP:exon.3 8.55959 chr2:57975642-57975745 KIF5A:exon.1;KIF5A:exon.23;KIF5A:exon.26 222.932 chr1:3063265-3063458 AVP:外显子3 8.55959 chr2:57975642-57975745KIF5A:外显子1;KIF5A:外显子23;KIF5A:外显子26 222.932 你可以试试

awk '
    FNR==NR{d[$0]; next;}          #Store each key to find, from file2
    {                              #for each line in file1
        for(k in d){               #for each key in d (file2)
            pat="(^|;)"k":";       #pattern to search (regular expression)
            if($2 ~ pat){
                print;             #print if match with RE
                break;
            }
        }
    }' file2 file1
你得到

chr1:3063265-3063458 AVP:exon.3 8.55959 chr2:57975642-57975745 KIF5A:exon.1;KIF5A:exon.23;KIF5A:exon.26 222.932 chr1:3063265-3063458 AVP:外显子3 8.55959 chr2:57975642-57975745KIF5A:外显子1;KIF5A:外显子23;KIF5A:外显子26 222.932
为sort.2.txt设置
RS=“,”
,看起来有点可疑。这真的是你想做的吗?在awk找到逗号之前,所有内容都将被视为一个字段,而我在示例文件中没有看到任何逗号。(如果将示例文件命名为与命令中相同的名称,也会有所帮助。)我已重命名文件名以匹配。我道歉,因为我认为我做了那件事。我将从文件1中删除
RS=“,”
,因为我试图在单独的文件(匹配)中输出与文件2匹配的每一行。谢谢:)。可以更简单一些,试试
grep-Ff file2 file1
。设置sort.2.txt的
RS=“,”
,看起来有点可疑。这真的是你想做的吗?在awk找到逗号之前,所有内容都将被视为一个字段,而我在示例文件中没有看到任何逗号。(如果将示例文件命名为与命令中相同的名称,也会有所帮助。)我已重命名文件名以匹配。我道歉,因为我认为我做了那件事。我将从文件1中删除
RS=“,”
,因为我试图在单独的文件(匹配)中输出与文件2匹配的每一行。谢谢:)。可以更简单一些,试试
grep-Ff file2 file1
。设置sort.2.txt的
RS=“,”
,看起来有点可疑。这真的是你想做的吗?在awk找到逗号之前,所有内容都将被视为一个字段,而我在示例文件中没有看到任何逗号。(如果将示例文件命名为与命令中相同的名称,也会有所帮助。)我已重命名文件名以匹配。我道歉,因为我认为我做了那件事。我将从文件1中删除
RS=“,”
,因为我试图在单独的文件(匹配)中输出与文件2匹配的每一行。谢谢:)。可以更简单一些,试试
grep-Ff file2 file1
。设置sort.2.txt的
RS=“,”
,看起来有点可疑。这真的是你想做的吗?在awk找到逗号之前,所有内容都将被视为一个字段,而我在示例文件中没有看到任何逗号。(如果将示例文件命名为与命令中相同的名称,也会有所帮助。)我已重命名文件名以匹配。我道歉,因为我认为我做了那件事。我将从文件1中删除
RS=“,”
,因为我试图在单独的文件(匹配)中输出与文件2匹配的每一行。谢谢:)。可以更简单一些,试试
grep-Ff file2 file1