2つのファイルを比較し、必要な内容を3番目のファイルに出力する方法

2つのファイルを比較し、必要な内容を3番目のファイルに出力する方法

2つの入力ファイルがあります。

ファイル1の内容は(file1)です。

"BRGTEST-242" a.txt
"BRGTEST-240" a.txt
"BRGTEST-219" e.txt

ファイル2の内容は(file2)です。

"BRGTEST-244" a.txt
"BRGTEST-244" b.txt
"BRGTEST-231" c.txt
"BRGTEST-231" d.txt
"BRGTEST-221" e.txt

最終出力を()として取得したいと思いますfile3

BRGTEST-244 is depdendent on BRGTEST-242 for file a.txt    
BRGTEST-244 is depdendent on BRGTEST-240 for file a.txt    
BRGTEST-221 is dependent on BRGTEST-219 for the file e.txt 

シェルスクリプトロジックを書くには?試してみましたが、awk目的の結果が得られませんでした。

ベストアンサー1

多次元配列をサポートするGNU Awk(gawk)を使用すると、ロジックは次のようになります。

gawk '
  NR==FNR {
    a[$2][++c[$2]] = $1; next
  } 
  $2 in a {
    for (i in a[$2]) 
      print $1 " is dependent on " a[$2][i] " for " $2
  }
' File1 File2
"BRGTEST-244" is dependent on "BRGTEST-242" for a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for a.txt
"BRGTEST-221" is dependent on "BRGTEST-219" for e.txt

引用符も削除する必要がある場合:

gawk '
  NR==FNR {
    a[$2][++c[$2]] = substr($1,2,length($1)-2); next
  } 
  $2 in a {
    for (i in a[$2]) 
      print substr($1,2,length($1)-2) " is dependent on " a[$2][i] " for " $2
  }
' File1 File2
BRGTEST-244 is dependent on BRGTEST-242 for a.txt
BRGTEST-244 is dependent on BRGTEST-240 for a.txt
BRGTEST-221 is dependent on BRGTEST-219 for e.txt

おすすめ記事