Сравните два файла .csv

У меня два файла: «file1» имеет идентификаторы сотрудников. «file2» имеет полную базу данных сотрудников. Вот как они выглядят:

file1

123123 222333 

file2

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

Я хочу сравнить два файла и исключить записи из файла 'file2', которые имеют идентификационные номера в файле '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!

  • Как разобрать этот вывод и поместить его в массив?
  • Назначение переменной из файла, разделенной разделителем
  • Недостаток Linux: / dev / stdin не работает с сокетами
  • xterm не найден абсолютный путь для оболочки
  • Как я могу получить много адресов из многих траекторий с помощью сценария bash без ошибок?
  • Редактирование INI-подобных файлов со сценарием
  • perl: Заменить строку в файле двойными кавычками
  • Сравнение переменных внутри, если в Bash
  • 4 Solutions collect form web for “Сравните два файла .csv”

    Я предполагаю, что ваши файлы csv – это что-то вроде:

    File1

     123123,, 222333,, 

    File2

     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 

    Более подробную информацию о команде можно найти здесь: man join

     join [OPTION]... FILE1 FILE2 -t CHAR use CHAR as input and output field separator -v FILENUM like -a FILENUM, but suppress joined output lines 

    Вы также можете попробовать следующее решение 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) 

    Попробуй это:

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

    Добавьте -F',' который говорит awk, что есть разделитель запятой или если вы используете | , использовать -F'|'

    поэтому ваш скрипт должен выглядеть так

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

    Возможно ли, чтобы демон запускал процесс как другого пользователя, не имея демона суперпользователя?

    `pwd`, но опустить первые n каталогов

    Ошибка загрузки виртуальной машины Debian – «восстановление журнала»

    Как измерить продолжительность операции в терминале, а не в коде

    Linux fgrep как извлечь «only_words_in_my_language» из большого файла «MIXED_WORDS»?

    DNS временно терпит неудачу с VPN-адресами

    пароль мультиплатформенного изменения

    Почему Ubuntu и Windows показывают разное количество свободного места

    Могу ли я работать с Sql Server, Office и C # с помощью Linux?

    Загадочные ошибки разрешения Samba после миграции службы

    Создайте файл с потоковым интерфейсом

    Как читать .vma-файлы?

    mount -t cifs: «Операция не поддерживается», но может подключаться через smbclient

    Что мешает ifenslave от соединения нескольких туннелей OpenVPN-through-Tor в режиме баланса-rr?

    Неустранимая ошибка: класс HttpRequest не найден

    Linux и Unix - лучшая ОС в мире.