2016-06-21 17 views
1

file1とfile2の最初の4つの列を比較します。私はfile1のすべての行+ file2のfile1にない行を出力したい。2つのファイルの列を比較し、一致しない印刷

File1: 
2435 2 2 7 specification 9-8-3-0 
57234 1 6 4 description 0-0 55211 
32423 2 44 3 description 0-0 24242 

File2: 
2435 2 2 7 specification 
7624 2 2 1 namecomplete 
57234 1 6 4 description 
28748 34 5 21 gateway 
32423 2 44 3 description 
832758 3 6 namecomplete 

output: 
2435 2 2 7 specification 9-8-3-0 
57234 1 6 4 description 0-0 55211 
32423 2 44 3 description 0-0 24242 
7624 2 2 1 namecomplete 
28748 34 5 21 gateway 
832758 3 6 namecomplete 

どのように一致しないものを印刷するのか分かりません。

答えて

2

あなたは、このようなawkスクリプトでそれを行うことができます。

script.awk

FNR == NR { mem[ $1 $2 $3 $4 $5 ] = 1; 
      print 
      next 
      } 

      { key = $1 $2 $3 $4 $5 
      if(! (key in mem)) print 
      } 

そして、このようにそれを実行します:awk -f script.awk file1 file2

最初の部分は最初の5つのフィールドを記憶し、行全体を印刷して次の行に移動します。この部分は、最初のファイルの行にのみ適用されます。

2番目の部分は、2番目のファイルの行にのみ適用されます。行がmemにないかどうかをチェックします。その場合、行はfile1になく、印刷されます。

+0

"if(!(key in mem))print"この印刷を変更して行を変更できるようにするにはどうすればよいですか? – diborbi

+1

@diborbi 'print $ 1 $ 3"のように書き留めてください。 'print'は' print $ 0'を意味するショートカットです –

関連する問題