ソートされていないファイルと混合されたケースファイルを比較して一意のアイテムのみを選択する

ソートされていないファイルと混合されたケースファイルを比較して一意のアイテムのみを選択する

2つの方法でファイルを比較すると、少し不満を感じます。

  • ファイル1
    bill 
    telephone
    address_1
    address_2
    address_3
    city
    postal_code
    
  • ファイル2
    Bill
    Bill_ID
    Telephone
    Address_1
    Address_2
    city
    Postal_Code
    

2つのファイルを一意の値で埋めようとしています。したがって、私の予想結果は次のようになります。

+-----------+---------+
|   File1   |  File2  |
+-----------+---------+
|           | Bill_ID |
| address_3 |         |
+-----------+---------+

私が達成しようとしているもの:

  • sdiff最初はアルファベット順にソートされましたが、すべての列が生成されました。

  • または

    sdiff -Wais File1.txt File2.txt | awk '{print $1}' | sort -u
    

    ところで、ファイルを反転して2回実行する必要があります。

  • commしかし、このようなエラーがあります。

    comm -23 < (sort File1.txt) <(sort File2.txt)
    bash: syntax error near unexpected token '('
    
  • diffしかし、出力が間違っているようです。

    diff File_1 File_2 | grep '^>' | cut -c 3-
    

これらすべてのケースで私が直面している問題は単なる比較です。正しいテーブルを入力できませんでした。

ベストアンサー1

join結合キーとしてテキストの小文字バージョンを使用できます。

$ preprocess() { awk -v OFS='\t' '{print tolower($0), $0}' | sort -t $'\t' -k1,1; }
$ join -t $'\t' -o1.2,2.2 -v1 -v2 <(preprocess < file1) <(preprocess < file2)
address_3
        Bill_ID

おすすめ記事