awk比较文件,在不匹配的情况下插入字符

awk比较文件,在不匹配的情况下插入字符,awk,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 1

我有两个以制表符分隔的文件

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

但这只打印在文件1中找到的第2列值。我不希望这些值丢失。

这将满足您的需要:

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

嘿这在逻辑方面有很大帮助,但代码并不能完全满足我的需要。我需要它只为pos.txt中的列值打印X我不希望它打印文件1中的所有内容。txt您可以添加所需的输出以补充您的问题描述吗?第一个文件中没有第四列,所以您尝试使用第四列中的X输出的确切内容是什么?为什么不举一个例子,说明pos.txt中的一些字段与相关的期望输出不匹配?这将有助于澄清您的需求相当多-现在它是完全模糊的。即使将第一个文件命名为pos.txt,将第二个文件命名为file1,而不是简单地命名为file1和file2,也会让人感到困惑。把你的问题说得清楚简单。