2015-10-05 61 views
0

我正在嘗試使用awk將file1與file2匹配並打印在單獨文件中匹配的行。 File1是〜4MB,我得到下面的錯誤,我似乎無法修復它。謝謝 :)。awk將file1與file2匹配並輸出匹配

awk 'NR==FNR{c[$0]; next} ($0 in c)' RS="," file1.txt RS="\n" file2.txt > match.txt 

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 
+0

設置'RS = 「」'爲sort.2.txt看起來有點可疑。那真的是你想要做的嗎?在awk發現逗號之前,所有內容都將被視爲一個字段,並且您的示例文件中沒有看到任何逗號。 (如果您命名示例文件與您的命令相同,這也會有所幫助。) – jas

+0

我已將文件名重命名爲匹配。我很抱歉,因爲我認爲我那樣做了。我將從file1中刪除'RS =「,」',因爲我試圖在單獨的文件(匹配)中輸出與file2匹配的每行。謝謝 :)。 – Chris

+0

非常感謝你:)。 – Chris

回答

3

你可以試試,

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