比较shell脚本中的两个文件

时间:2017-02-07 10:35:30

标签: shell scripting

我有两个内容相似的文件。对于ex file1,有不同的傻瓜的文件权限详细信息:

drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/abc
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyz
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyzhrt/rth
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyz/rhr/rthrh
-rw-rwxr--+  3 user1 hive       1462 2017-01-31 16:55 /user/anc/xyz/rhrhheh
-rw-rwxr--+  3 user1 hive          9 2017-01-31 16:55 

File2的内容相似。

我想要比较这两个文件,以便如果file1中的文件夹与file2中具有相同名称的文件夹具有相同的权限,则打印完整的行然后PASS或者False。

2 个答案:

答案 0 :(得分:1)

这样的东西?

$ cat a.txt
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/abc
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyz
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyzhrt/rth
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyz/rhr/rthrh
-rw-rwxr--+  3 user1 hive       1462 2017-01-31 16:55 /user/anc/xyz/rhrhheh

$ cat b.txt
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/abc
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyz

$ sort a.txt b.txt |uniq -d
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/abc
drwxrwxr-x+  - user1 hive          0 2017-01-31 16:55 /user/anc/xyz

更新

Uniq -d打印重复的行。如果两个文件具有相同的行,则上述简单方法有效。

为了根据相同的文件夹名称(第8列)查找两个文件中存在的文件,并且在相同的权限上,您可以执行以下操作:

sort -k8 a.txt b.txt |awk '{print $1,$8}' |uniq -d

sort -k8将使用第8列将这两个文件排序为排序键(文件夹名称)
awk将打印字段1(权限)和字段8(文件夹)
uniq -d会找到完全相同的条目,在这种情况下意味着相同的权限和文件夹名称(由awk格式化)

然后,您可以使用某种grep从任何文件中提取公共行。

因此,即使有多个maches,这也可以基于第一列和最后一列正常工作:

$ common=$(sort -k8 a.txt b.txt |awk '{print $1":"$8}' |uniq -d|cut -d':' -f2)
$ grep -F "$common" a.txt

可以使用其他工具(如awk等)实现各种解决方案。

答案 1 :(得分:0)

首先
打印第一列,然后打印最后一个文件名

perl -a -nE 'print $F[0]," ", ((split(/\//,$_))[-1])'

输出:

drwxrwxr-x+ abc  
drwxrwxr-x+ xyz  
drwxrwxr-x+ rth  
drwxrwxr-x+ rthrh  
-rw-rwxr--+ rhrhheh  

你告诉我:我收到的内容如上所述。现在我想根据最后一列比较两个文件的第一列 File2具有相似的内容。

所以我认为两个文件中唯一不同的是许可 好了,现在您可以轻松存储您的文件输出到差异文件,例如: file_1 file_1 ,然后比较在命令行中使用diff。而已。

$ cat file_1  
drwxrwxr-x+ abc  
drwxrwxr-x+ xyz  
drwxrwxr-x+ rth  
drwxrwxr-x+ rthrh  
-rw-rwxr--+ rhrhheh  

$ cat 2  
drwxrwxr-x+ abc  
drwxrwxr-x+ xyz  
drwxrwxr-x+ rth  
drwxrwxr--+ rthrh  
-rw-rwxr--+ rhrhheh  

$ diff file_1 file_2
4c4  
< drwxrwxr-x+ rthrh  
---  
> drwxrwxr--+ rthrh