2017-07-25 65 views
-4

例如:在UNIX:如何打印包含文件的话文件1的所有行2

File1中:

AA123|1111|111 
BB123|2222|222 
CC123|3333|333 
DD123|4444|444 

文件2:

CC123 
AA123 

所需的输出:

CC123|3333|333 
AA123|1111|111 
+1

有无数的例子说明如何做这种事情已经在这个网站上。 –

+0

请澄清你的问题。你如何定义* word *?比赛可以在任何地方吗?你的管道符号有什么意义? –

+0

可能的重复: https://stackoverflow.com/questions/22686690/comparing-two-text-files-and-counting-number-of-occurrences – DanieleO

回答

0

根据修改后的问题,答案可以更容易,

$ awk -F'|' 'NR==FNR{a[$1];next} ($1 in a)' file2 file1 
AA123|1111|111 
CC123|3333|333 

简要解释,

  • NR==FNR{a[$1]:file2中保存$1作为阵列的键
  • ($1 in a):打印文件1行,如果$1匹配到阵列中的关键
+0

@glennjackman,感谢您的通知,我修改了我的答案。 – CWLiu

+0

谢谢你这个工作! –

+0

@abhinavbharadwaj如果确实可以帮助你,你可以选择接受答案。 :) – CWLiu

0

awk scriptfile:

FNR == 1 && FNR != NR { 
         strt=1 
         } 
strt != 1 { 
       for (i=1;i<=NF;i++) { 
           cnt++;fnd[cnt]=$i 
           } 
      } 
strt==1 { 
       for (p=1;p<=cnt;p++) { 
           for (i=1;i<=NF;i++) { 
             if ($i ~ fnd[p]) { 
               printf ("%s ",$i) 
             } 
           } 
       } 
     } 

呼叫与脚本文件:

awk -f scriptfile File2 File1 

我们处理在同一时间这两个文件。首先将File2中的数据读入数组,然后使用它循环File1中的每个字段,将匹配打印到由空格分隔的数组(fnd)。

这将打印文本的连续符合换行符(我不知道你想怎么处理这个)

+0

谢谢你, $ awk -F'|' 'NR == FNR {a [$ 1]; next}(1美元)'file2文件1 这对我来说效果最好 –

1

平原的grep可以这样做:

grep -f file2 file1 

我们可以得到更精确,并添加-F和-w选项。

相关问题