сравнить 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 символов), его не работает. его разрезание текста в определенный момент.

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

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

Использование 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 не испускать парные строки, но испускать неспаренные строки в правом файле