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
答え2
この試み:
awk 'BEGIN{FS=","};FNR==NR{a[$1];next};!($1 in a)' file1 file2 > file3
答え3
次のPython2ソリューションを試してみることもできます。
#!/usr/bin/env python2
import csv
with open('file_1') as f1:
file_1_list = [line[0] for line in csv.reader(f1)]
with open('file_2') as f2:
for line in csv.reader(f2):
if line[0] not in file_1_list:
print ' '.join(line)
答え4
追加すると、-F','
カンマ区切り文字があるか|
、 。-F'|'
スクリプトは次のようになります。
awk -F',' 'FNR==NR{a[$1];next};!($1 in a)' file1 file2 > file3