他のファイルに既に存在する限り、CSVファイルのエントリの削除

他のファイルに既に存在する限り、CSVファイルのエントリの削除

2つのファイルがあります。 「ファイル1」は従業員ID番号を含み、「ファイル2」は従業員のデータベース全体を含む。彼らは次のとおりです。

  • file1
    123123
    222333
    
  • file2
    111222 Jones Sally
    111333 Johnson Roger
    123123 Doe John
    444555 Richardson George
    222333 Smith Jane
    223456 Alexander Philip
    

file2これら2つのファイルを比較し、ID番号を持つエントリを削除したいと思いますfile1

このコマンドが完全に機能することがわかりましたawk

awk 'FNR==NR{a[$1];next};!($1 in a)' file1 file2 > file3

結果:

  • file3
    111222 Jones Sally
    111333 Johnson Roger
    444555 Richardson George
    223456 Alexander Philip
    

だからこれは期待通りに動作します。

私の質問はファイルは実際には単純化された.csvファイルなので、スペースの代わりにカンマを区切り文字として使用する必要があります。私はこれを行うために(つまり、-F,コマンドのどこにでも)私が考えることができるすべてを試しましたが、成功しませんでした。-F','-F","

.csvファイルで機能させるにはどうすればよいですか?

ちなみに私はMacBook Pro、OSX Lionを使っています!

ベストアンサー1

csvあなたのファイルが次のように見なされます。

ファイル1

123123,,
222333,,

ファイル2

111222,Jones,Sally
111333,Johnson,Roger
123123,Doe,John
444555,Richardson,George
222333,Smith,Jane
223456,Alexander,Philip

join次のようにコマンドを試すことができます。

# join -t, -v 2 <(sort file1) <(sort file2)
111222,Jones,Sally
111333,Johnson,Roger
223456,Alexander,Philip
444555,Richardson,George

このコマンドの詳細については、ここで確認できます。男性が参加する

join [OPTION]... FILE1 FILE2

-t CHAR
    use CHAR as input and output field separator 
-v FILENUM
    like -a FILENUM, but suppress joined output lines 

おすすめ記事