Unixで2つのファイル間の違いのみを探す(追加)

Unixで2つのファイル間の違いのみを探す(追加)

2つのファイルがあります。 name1.txtとname2.txt。

names1.txtには表示されますが、names2.txtには欠落している名前を知る必要があります。その後、別のファイルMissing_names.txtに保存する必要があります。

Diffコマンドは違いを提供しますが、多くの情報も印刷します。また、names2.txtにはあるがnames1.txtにはない名前を知りたくありません。したがって、(names1.txt - names2.txt)操作と同じです。

答え1

diff <(sort -u names2.txt) <(sort -u names1.txt) | 
  sed -n -e 's/^> //p' > missing_names.txt 

または

diff <(sort -u names1.txt) <(sort -u names2.txt) | 
    sed -n -e 's/^< //p' > missing_names.txt 

これらの1つは、Name2の名前ではなくName1の名前のみを提供します。

diff(などの出力形式の指定オプションはありません-u)(>の後に空白)プレフィックスが付いた追加の内容と>(<の後に空白)のプレフィックスが付いた削除内容を印刷します。存在する場合、<スクリプトはsed行の先頭から削除し、変更された(つまり一致する)行のみを印刷します。

答え2

cat name_1.txt | while read line
do
  grep -q "$line" name_2.txt
  if [ "$?" -gt "0" ]; then
     echo "$line" >> name_3.txt
  fi
done

メモ:これを想定し、name_1.txt名前name_2.txtのみを含めます。

関連情報