我有一个脚本,其中有两个文件。我必须比较两个文件,并且必须显示不匹配文件的内容,例如:
file1
file2
file1的内容:
abcd
efgh
ijk
file2的内容:
abcd=123
efgh=
ijkl=1213
e.g。两个文件中都存在aefgh
,但文件2中不存在efgh
的值。因此,它应显示匹配值不存在。
file="$HOME/SAMPLE/token_values.txt"
while read -r var
do
if grep "$var" environ.ref >/dev/null
then
:
else
print "$var ((((((Not Present))))))" >> final13.txt
fi
done < "$file"
答案 0 :(得分:1)
我想这个脚本会这样做:
#!/bin/bash
#below line removes the blank lines in the first file
fileprocessed1=$( sed '/^$/d' your_file1 )
#below line removes the blank lines and replaces the = with blank space in the second file
fileprocessed2=$( sed '{/^$/d};{s/=/\ /g}' your_file2 )
paste <(echo "$fileprocessed1") <(echo "$fileprocessed2")| awk '{
if($1 == $2)
{
if(length($3) == 0)
{
print NR" : Match found but value Missing for "$2
}
else
{
print NR" : Match found for "$1" with value "$3
}
}
else
{
print NR" : No match for "$1
}
}'
会给:
1 : Match found for bcd with value 123
2 : Match found but value missing for efgh
3 : No match for ijk
您提供的文件。
但是我真的希望有人能为这一个带来一个单行。 :)
答案 1 :(得分:0)
我会在perl
中解决这个问题:
#!/usr/bin/env perl
use strict;
use warnings;
open ( my $file1, '<', "~/SAMPLE/token_values.txt" ) or die $!;
chomp ( my @tokens = <$file1> );
open ( my $file2, '<', 'environ.ref' ) or die $!;
my %data = map { /(\w+)=(\w*)/ } <$file2>;
for my $thing ( @tokens ) {
print $thing,"\n" unless $data{$thing} eq '';
}