按位置比较文件

时间:2018-03-01 08:40:04

标签: bash diff

我想仅通过第一列比较两个文件。

我的第一个看起来像这样:

0009608a4138a8e7 hdisk26 altinst_rootvg
000f7d4a8234a675 hdisk12 vgdbf
000f7d4a8234d5c9 hdisk22 vgarcbkp

我的第二个文件如下:

000f7d4a8234a675 hdiskpower64 [Lun_vgdbf]
000f7d4a8234d5c9 hdiskpower61 [Lun_vgarcbkp]

这是我想要生成的输出:

0009608a4138a8e7 hdisk26 altinst_rootvg
000f7d4a8234a675 hdisk12 vgdbf hdiskpower64 [Lun_vgdbf]
000f7d4a8234d5c9 hdisk22 vgarcbkp hdiskpower61 [Lun_vgarcbkp]

我想知道为什么diff不支持位置比较。 像diff -y -p1-17 file1 file2这样的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用join生成所需的输出:

join -a 1 file1 file2

-a 1选项表示从第一个文件输出第二个中没有对应关系的行,因此这假设第一个文件包含第二个文件中存在的每个id。

它还依赖于在第一个文件上排序的文件,根据您的示例数据可能就是这种情况。如果不是,您需要事先对它们进行排序(join命令会警告您文件未被排序)。

示例执行:

$ echo '1 a b
> 2 c d
> 3 e f' > test1

$ echo '2 9 8
> 3 7 6' > test2

$ join -a 1 test1 test2
1 a b
2 c d 9 8
3 e f 7 6

Ideone test with your sample data