比较两个文件

时间:2010-08-23 04:37:57

标签: linux

我有2个文本文件在第一列上进行比较。以下comm命令正确显示了2个文件中的公共行。

comm develop1.txt qa1.txt -12

但是以下diff命令没有按预期显示差异。

diff develop1.txt qa1.txt --side-by-side

预期输出如下:

mysql-data/webservice 280292 | mysql-data/webservice 28684

但是这两个值不在同一行,因为最后一列中的数字不同。我确实需要以并排格式比较数字。 如何实现?

3 个答案:

答案 0 :(得分:3)

如果你想要快速和肮脏的东西(不是我会投入生产的东西,但对我自己的目的来说肯定是可以的):

for key in $(cat develop1.txt qa1.txt | awk '{print $1}' | sort -u) ; do
    devval=$(grep "^${key} " develop1.txt | awk '{print $2}')
    qa1val=$(grep "^${key} " qa1.txt | awk '{print $2}')
    if [[ "${devval}" != "${qa1val}" ]] ; then
        echo "$key: dev=[${devval}], qa=[${qa1val}]"
    fi
done

第一行将两个文件中的所有唯一键检索到一个列表中(如果您的键有空格但是可能使任何解决方案难以实现,则不会起作用,这似乎不是这种情况)

第二行和第三行只是从两个文件中获取每个键的值。

if语句然后打印出键和两个值,但仅限于值不同的位置。

不漂亮,甚至没有经过彻底测试,但它可能适合您的目的。您必须注意边缘情况,例如密钥可能在文件中多次出现的可能性,或者密钥可能不在行的开头。

答案 1 :(得分:1)

我不确定我到底知道你想做什么。您是否尝试使用join命令?鉴于两个文件仅包含您显示的示例行,结果将是:

$ join develop1.txt qa1.txt
mysql-data/webservice 280292 28684

您可以告诉join输出无法显示的行:

$ join -a1 -a2 develop1.txt qa1.txt

答案 2 :(得分:0)

我知道我会说的不完全是你问的问题,但你尝试过视觉差异程序吗?这样的WinMerge(适用于Windows)还是Meld(适用于Linux)?它们的界面预览如下(取自谷歌图片):

<强>的WinMerge:

alt text

<强> MELD:

alt text