比较令牌文件时忽略空格

时间:2015-12-22 13:36:22

标签: bash shell unix scripting

我有一个脚本,其中有两个文件。我必须比较两个文件,并且必须显示不匹配文件的内容,例如:

file1
file2

file1的内容:

abcd
efgh
ijk

file2的内容:

abcd=123
efgh=
ijkl=1213
  1. 如果未发生匹配,则应显示匹配不会发生。
  2. 如果匹配名称出现但file2中不存在相应名称的值。它应该显示为缺少值。
  3. 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"
    

2 个答案:

答案 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 '';
}