2014-09-19 57 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