The limitations of MS Excel in handling large csv files can be circumvented using the R language and the RStudio environment. I cite the complete code snippet for solving the problem:
# Работающий код на примере трех файлов: # a.csv, b.csv, c.csv - файлы для демонстрации работы кода для 1-ой части вопроса; # в результате обработки a.csv и b.csv получим файл содержащий только уникальные значения # z.csv - файл для демонстрации работы кода для 2-ой части вопроса # # Код очень примитивен # подключаем библиотеку для манипуляции данными library(dplyr) # создаем общий файл из нескольких # создаем Таблицы данных с содержимым файлов file_a <- "D:/Tmp/R-cmprFls/a.csv" df_temp_a <- read.csv(file_a, head=TRUE, sep="|", dec=",") file_b <- "D:/Tmp/R-cmprFls/b.csv" df_temp_b <- read.csv(file_b, head=TRUE, sep="|", dec=",") file_c <- "D:/Tmp/R-cmprFls/c.csv" df_temp_c <- read.csv(file_c, head=TRUE, sep="|", dec=",") # для добавления количества обрабатываемых файлов # добавляем строки file_xxx, df_temp_xxx # объединяем все Таблицы данных в одну join_df_temp <- bind_rows(df_temp_a, df_temp_b, df_temp_c) # для определения уникальных строк в Таблице данных используем группировку # и ссумирование по полю Number # добавляем поле Cnt - для подсчета одинаковых Number mt_df_temp <- mutate(join_df_temp, Cnt = 1) # группируем по полю Number и суммируем по полю Cnt gr_df_temp <- group_by(mt_df_temp, Number) sm_df_temp <- summarise(gr_df_temp, Cnt = sum(Cnt)) # уникальными являются строки со значением поля Cnt = 1 rslt_1_df_temp <- filter(sm_df_temp, Cnt == 1) # сохраняем результат для 1-ой части вопроса write.table(rslt_1_df_temp, file = "D:/Tmp/R-cmprFls/rslt_1_df_temp.csv", row.names = FALSE) # 2-я часть. Объединяем результат 1-ой части с эталонным файлом # создаем Таблицу даных на основании z.csv file_z <- "D:/Tmp/R-cmprFls/z.csv" df_temp_z <- read.csv(file_z, head=TRUE, sep="|", dec=",") mt_df_temp_z <- mutate(df_temp_z, Cnt=1) # создаем результирующую Таблицу данных в соответствии с требованиями # для 2-ой части вопроса rslt_2_df_temp <- anti_join(mt_df_temp_z, rslt_1_df_temp) # сохраняем результат write.table(rslt_2_df_temp, file = "D:/Tmp/R-cmprFls/rslt_2_df_temp.csv", row.names = FALSE)
Data files
a.csv
Number 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666
b.csv
Number 1111111111 2222222222 3333333333 7777777777 8888888888 9999999999
c.csv
Number 1111111111 2222222222 3333333333 7777777777 8888888888 9999999999
z.csv
Number 1111111111 2222222222 4444444444 5555555555 7777777777 8080808080 9090909090
results:
rslt_1_df_temp
"Number" "Cnt" 4444444444 1 5555555555 1 6666666666 1
rslt_2_df_temp
"Number" "Cnt" 8080808080 1 9090909090 1 2222222222 1 1111111111 1 7777777777 1