2014-09-19 31 views
0

我有兩個製表符分隔的文件。awk比較文件,在不匹配的情況下插入字符

pos.txt

A 100027454  
A 100028517  
A 100028954  
A 100028986  
A 100033307  
A 100033331  
A 100033338  
A 100033382  
A 100033410  
A 100033424  

FILE1.TXT

A 102470 T  * 
A 102471 G  * 
A 102472 C  * 
A 102473 T  * 
A 102474 G  * 
A 102475 G  * 
A 102476 T  * 
A 102477 C  * 
A 102478 C  * 
A 102479 T  * 

我要比較兩個文件中的第一個文件的第二列的基礎上。如果第二列值存在於兩個文件的一行中,我希望它在第二個文件中輸出整行。如果該值存在於第一個文件中,而不是第二個文件中,我希望它在第四列和前三列中按原樣輸出X

這是據我已經能夠得到:

awk 'FNR==NR{a[$2]++;next}a[$2]' pos.txt file1.txt 

但這隻能打印列它file1發現2倍的值。我不希望這些值丟失。

+3

您可以加入你想要的輸出,以補充你的問題的描述? – 2014-09-19 08:08:31

+1

在第一個文件中沒有第四列,所以你試圖用第四列中的X輸出到底是什麼?爲什麼不發佈pos.txt DO的某些字段匹配的示例以及相關的期望輸出?這將有助於澄清你的需求 - 現在它完全是模糊的。甚至將'first file'命名爲'pos.txt'和'second file'命名爲'file1',而不是簡單地將'file1'和'file2'命名爲混淆。只是讓你的問題清晰和簡單。 – 2014-09-19 18:31:38

回答

0

這將滿足您的需求:

$ awk 'FNR==NR{a[$2]++;next}a[$2]{$4="\tx";print;next}1' pos.txt file1.txt 
+0

嘿。這在邏輯上有很大幫助,但代碼並不完全按照我的需要來做。我需要它僅爲pos.txt中存在的列值打印X,我不希望它在file1.txt中打印所有內容 – overtime 2014-09-19 07:54:15