bash: diff函数输出内容到2列

bash: output contents of diff function into 2 columns

我有一个看起来像这样的文件:

 file1.txt
 rs13339951:45007956:T:C 45007956
 rs2838331 45026728
 rs5647 12335
 rs4687576 5353566

 file2.txt
 rs13339951 45007956
 rs2838331 45026728
 rs5647 12335
 rs4687576:ATCFHF 5353566

更多说明:

我想确定 column1 中的值在两个文件中不同的行。 IE。在我的示例中,这些行 1 和 4。我可以用 diff file1.txt 和 file2.txt 来做到这一点。

但是,我想获得这样的结束文件(见下文)。事实上,我的目标是使用 sed 将一个文件的名称替换为另一个文件,以便两个文件完全匹配。

rs13339951:45007956:T:C rs13339951
rs4687576 rs4687576:ATCFHF

awk 非常适合这个

awk 'FNR==NR {a[]=; next}  a[]!= {print a[] " " }' file1 file2

产出

rs13339951:45007956:T:C rs13339951
rs4687576 rs4687576:ATCFHF

我们正在将两个文件传递给 awk。它将连续越过它们。

FNR==NR {.... next} { ... }

有了这个"trick",第一个动作对第一个文件执行,第二个动作对第二个文件执行。

a[]=

键值查找 table。第二列是键,第一列是值。我们在读取第一个文件时构建此查找 table。

a[]!= {print a[] " " }

在遍历第二个文件时,将当前第一列与查找中的值进行比较 table。如果它们不匹配,则打印所需的输出。