2つのファイルを比較し、文字列と一致しない行の最初の単語のみを印刷します。

2つのファイルを比較し、文字列と一致しない行の最初の単語のみを印刷します。

2つのファイルを比較し、文字列で一致する行と一致しない行の最初の単語だけを印刷したいと思います。

file1.txt
=========

abc 123
bcd 234
cde 345

file2.txt
=========

abc 123
bcd 223
cde 234

上記のabcは、file1.txtとfile2.txtの両方で一致します。したがって、次のように印刷する必要があります。

abc is matching. it is ok.

上記のfile1.txtとfile2.txtでは、bcdとcdeの間に違いはありません。したがって、次のように印刷する必要があります。

bcd is not matching. please check.
cde is not matching. please check.

ベストアンサー1

そしてawk

awk 'NR==FNR{a[$1]=$2; next}; $2==a[$1] {print $1 " OK"; next} \
                                        {print $1 " Not OK"}' f1.txt f2.txt
  • NR==FNR最初のファイルに対してのみ機能しますf1.txt。ここではa、最初のフィールドをキーに、2番目のフィールドを値として使用して、next条件を下に移動せずに次のレコードに移動します。

  • $2==a[$1]2番目のファイルの2番目のフィールドが配列のf2.txt最初のキーフィールドの値と一致することを確認し、a目的の形式で印刷します。

例:

% cat f1.txt
abc 123
bcd 234
cde 345

% cat f2.txt
abc 123
bcd 223
cde 234

% awk 'NR==FNR{a[$1]=$2; next}; $2==a[$1] {print $1 " OK"; next} {print $1 " Not OK"}' f1.txt f2.txt
abc OK
bcd Not OK
cde Not OK

おすすめ記事