我有2个文本文件,需要逐行比较。
我基本上是想根据每行的匹配输出“匹配”或“不匹配”。
我尝试阅读一些教程,并使用诸如diff
和dircmp
之类的方法,但似乎找不到解决方法。我不在乎它是bash,perl,python等。这两个文件均为243行。
Linux中有可用的命令来执行此操作吗?
这是我正在寻找的示例...
文件1
Test
Hello
Example
文件2
Test
What
Example
我想输出以下内容:
matching
not matching
matching
答案 0 :(得分:1)
在perl中:
#!/usr/bin/perl
use strict;
use File::Slurp;
my @file1 = read_file 'file1', { chomp => 1 };
my @file2 = read_file 'file2', { chomp => 1 };
foreach (@file1) {
my $line = shift @file2;
print $_ eq $line ? "not matching\n" : "matching\n";
}
答案 1 :(得分:0)
您需要的是以下格式的awk脚本:
$ awk '(NR==FNR){a[FNR]=$0;next}
!(FNR in a) { print "file2 has more lines than file1"; exit 1 }
{ print (($0 == a[FNR]) ? "matching" : "not matching") }
END { if (NR-FNR > FNR) print "file1 has more lines than file2"; exit 1}' file1 file2
答案 2 :(得分:0)
此脚本的工作原理是两个文件均为243行。您需要先对两个文件进行排序,然后再运行脚本sort file1.txt > file1.sorted.txt
,而对另一个文件进行排序。
#!/bin/bash
while read file1 <&3 && read file2 <&4
if [[ $file1 == $file2 ]]; then
echo "matching" >> three.txt
else
echo "not matching" >> three.txt
fi
done 3</path/to/file1.sorted.txt 4</path/to/file2.sorted.txt
上面的脚本将逐行读取每个文件,并使用if语句比较输入。如果两个字符串相同,则它将“匹配”写入three.txt
,否则将“不匹配”写入同一文件。循环将遍历每一行。
您将必须对两个文件中的数据进行排序以进行比较。 我已经使用以下数据对其进行了测试:
one.sorted.txt
abc
cba
efg
gfe
xyz
zxy
two.sorted.txt
abc
cbd
efh
gfe
xyz
zmo
three.txt
matching
not matching
not matching
matching
matching
not matching