다른 파일에 이미 존재하는 한 CSV 파일의 항목 삭제

다른 파일에 이미 존재하는 한 CSV 파일의 항목 삭제

두 개의 파일이 있습니다. "파일 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이 두 파일을 비교하고 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

관련 정보