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 中的一些值在 2 个文件之间是相同的,但不是全部
- column2 中的值在 2 个文件中完全相同
我想确定 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。如果它们不匹配,则打印所需的输出。
我有一个看起来像这样的文件:
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 中的一些值在 2 个文件之间是相同的,但不是全部
- column2 中的值在 2 个文件中完全相同
我想确定 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。如果它们不匹配,则打印所需的输出。