比较Unix中的两个文件

时间:2010-06-27 10:19:51

标签: unix

我有2个文件,有n行。 例如:文件1

465466454
546545454
5454454
Data=4545454545484848484
kuh uytyer huihkuh

文件2

e4654sdfdsf
544hjklhjl
464jku
Data=4545454545484848484
kuh uytyer huihkuh

正如您所看到的,两个文件在“Data =”之后有相同的数据(此“Data =”在文件中只出现一次)

所以我需要剪切“=”符号之前的行,然后比较这两个文件,然后得到一个输出,说明这两个文件在csv格式文件中是否相等。

它不仅仅是一个文件,而是两个不同文件夹中的多个文件,一个文件夹中的每个第一个文件都需要与另一个文件夹中的第一个文件进行比较,依此类推..

4 个答案:

答案 0 :(得分:3)

我认为你应该澄清你的问题。到目前为止的答案建议使用awk来获取'='之后的字符串。但是,据我了解您的问题,您希望查看从开头到以'Data ='开头的行的所有行。

您可以使用

sed '/^Data=/,$d' file

删除第一行中匹配'^ Data ='到结尾的所有行,并使用janmoesen提到的语法将结果提供给diff,例如。

diff <(sed '/^Data=/,$d' file1) <(sed '/Data=/,$d' file2)

答案 1 :(得分:2)

这是你使用awk来获取“=”符号

之后的数据的方法
awk '/Data=/{gsub("Data=","");f=1}f' file > temp1

正被重定向到临时文件。对您要比较的文件2执行相同操作。然后 使用命令diff来比较文件。

答案 2 :(得分:-1)

你知道“=”符号前有多少行? (即:对于2个给定的文件,“n”是否等于?) 因为你可以为grep使用-B(或--before)选项。

答案 3 :(得分:-1)

#!/bin/bash
FILE1=$(grep "=" $1 | cut -d"=" -f2)
FILE2=$(grep "=" $2 | cut -d"=" -f2)

if [ $FILE1 = $FILE2 ]; then
    echo "Equal"
else
    echo "Not Equal."
fi

简单的bash脚本,它将两个文件作为命令行参数并在相等时返回Equal。显然你可以插入任何其他命令代替它。

通过这种方法,您可以将要检查的文件列表也输入第二个参数。

*编辑:哇...这个人死了。