сравнить 2 столбца из 2 разных CSV-файлов

Мое намерение состоит в том, чтобы сравнить конкретный столбец из двух разных файлов csv и получить данные из второго файла, чего нет в первом файле. Например.

Первый файл

"siddhartha",1 "mukherjee",2 

Второй файл

 "siddhartha",1 "mukherjee",2 "unique",3 

Ожидаемый результат

 "unique",3 

Команда ниже работает правильно, когда размер текста первого столбца ограничен, поэтому в приведенном выше примере он работает.

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

но размер текста 1-го столбца довольно большой (например, 10000 символов), его не работает. его разрезание текста в определенный момент.

Любое решение для этого?

2 Solutions collect form web for “сравнить 2 столбца из 2 разных CSV-файлов”

Исходя из вашего простого примера выше, это должно работать. Это не удастся, если возможно, что любые данные из первого столбца могут оказаться в любом другом столбце или в пробеле есть пробелы.

Использование bash и GNU grep.

 grep -v -Ff <(cut -d',' -f 1 file1.csv) file2.csv > file3.csv 

объяснение

  • -v перевернутое совпадение
  • -Ff использовать файл для источника шаблонов
  • <(cut -d',' -f 1 file1.csv) получают первый столбец данных и используют его как наш «файл».

Вот решение, использующее не awk, а Miller :

 $ mlr --nidx join -u -j 1 --np --ur -f file1.csv file2.csv "unique",3 

Описание:

  • --nidx поскольку столбцы позиционируются по --nidx (т. е. нет строк заголовка)
  • -u присоединить вариант, чтобы не требовать отсортированные входы
  • -j 1 присоединиться к столбцу 1 для левого и правого файлов
  • --np --ur не испускать парные строки, но испускать неспаренные строки в правом файле
  • Как перемещать файлы во вновь созданный каталог при условии в shell / perl
  • Переменная среды $ PATH, по-видимому, не распознается
  • Сравните и распечатайте данные из разных текстовых файлов на один в Shell
  • Передача переменной sed
  • Простая функция обертки awk или псевдоним
  • Передайте флаг фона (&) через expect и ssh
  • Shell Script: отправка ввода в фоновый процесс
  • Проблемы с img2pdf и пробелы в именах файлов
  • как makefile может определить, доступна ли команда на локальном компьютере?
  • Как копировать и вставлять строки между ключевым словом start и end?
  • Как временно обходить псевдоним в tcsh?
  • Linux и Unix - лучшая ОС в мире.