2010-06-27 90 views
0

我有2个文件,它们有n个行。 如:文件1比较Unix中的两个文件

465466454 
546545454 
5454454 
Data=4545454545484848484 
kuh uytyer huihkuh 

文件2

e4654sdfdsf 
544hjklhjl 
464jku 
Data=4545454545484848484 
kuh uytyer huihkuh 

正如你可以看到这两个文件已经得到了地方后,相同的数据的“数据=”(以下简称“数据=”中只出现一次文件)

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

它不只是一个文件,但它会在2个不同的文件夹中许多文件和一个文件夹中的每个第一个文件需要与在另一个文件夹中的第一个文件进行比较,等等..

+0

你能澄清你的问题吗? – mbq 2010-06-27 10:32:54

+0

这有点含糊。定义“Unix”:仅限Bash shell,一个在大多数Unices,GNU utils上编译的C程序......还有,你需要做什么区分:Data ='行之前的行,或者' '只在该行登录?输出应该是什么。请重写您的示例,对算法/脚本应该做什么以及期望的输出结果有一些解释。 – janmoesen 2010-06-27 10:40:39

+0

两个文件夹中的文件是否一一对应,每个文件夹中的文件名相同?例如如果文件夹A中有一个myfile1111.txt,那么文件夹B中保证有一个等效的myfile1111.txt文件? – 2010-06-28 21:27:34

回答

-1

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

+0

嗨,我们不能告诉=符号之前的行数。我只是一个在编码方面没有任何知识的功能性人物,特别是Unix。你能帮我完成一个完整的编码吗? – 2010-06-27 18:43:38

+0

'-A'只是为了显示输出上下文。如果在=之前的行数已知并且一致,那么我可能会使用'head'。 @moustafa - 如果你不知道Unix或编码为什么将这个任务分配给你? (严肃地说,不是讽刺) – 2010-06-28 21:20:43

+0

我的错误,纠正了帖子。谢谢。 – Aif 2010-06-29 10:11:52

2

你这是怎么用awk后得到的数据“=”号

awk '/Data=/{gsub("Data=","");f=1}f' file > temp1 

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

+0

为什么不'awk -F'Data =''/^Data =/{print $ 2; }''?如果他使用最新版本的Bash,他可以使用进程替换'diff <(awk ... file1)<(awk ... file2)'。 – janmoesen 2010-06-28 07:02:38

3

我想你应该澄清你的问题。到目前为止的答案建议使用awk在'='后面获取字符串。但是,据我了解你的问题,你想看看从开始直到以'Data ='开头的行的所有行。

你可以使用

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

删除从匹配“^数据=”到端部,并使用该janmoesen提到的语法将检测结果送入到DIFF,例如第一行的所有行

diff <(sed '/^Data=/,$d' file1) <(sed '/Data=/,$d' file2) 
-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脚本,需要两个文件作为命令行参数,并在平等返回相等。显然你可以插入任何其他命令来代替。

从这种方法你可以管你想检查的文件列表到第二个参数也。

*编辑:哇......坏了这一个。