2017-07-25 49 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選項。

相關問題