2016-01-07 3 views
0

У меня есть два файла CSV, и мне нужно проверить создание, обновления и удаления. Возьмите следующие примеры файлов:Сравнение CSV-файлов в ubuntu

ORIGINAL FILE 
sku1,A 
sku2,B 
sku3,C 
sku4,D 
sku5,E 
sku6,F 
sku7,G 
sku8,H 
sku9,I 
sku10,J 

UPDATED FILE 
sku1,A 
sku2,B-UPDATED 
sku3,C 
sku5,E 
sku6,F 
sku7,G-UPDATED 
sku11, CREATED 
sku8,H 
sku9,I 
sku4,D-UPDATED 

Я использую команду Линукс комм следующим образом:

comm -23 --nocheck-order updated_file.csv original_file > diff_file.csv 

Который дает мне все вновь создаваемые и модифицируемые строки следующим образом

sku2,B-UPDATED 
sku7,G-UPDATED 
sku11, CREATED 
sku4,D-UPDATED 

Который является отлично, но если вы посмотрите внимательно, «sku10, J» был удален, и я не уверен, что это лучшая команда/способ проверить его. Данные, которые я предоставил, представляют собой просто демоверсию, текст «sku» не существует в реальных данных, однако столбец один из CSV-файлов является уникальным индексом 5 символов. Любые советы приветствуются.

+0

Привет @prime, то, что вы ищете, должно быть здесь -> https://www.google.fr/search?q=compare+two+files+with+bash&ie=utf-8&oe=utf-8&gws_rd=cr&ei = j22OVuzKIcOuPqaRougF –

ответ

1

Я хотел бы использовать вместо join:

join -t, -a1 -a2 -eMISSING -o 0,1.2,2.2 <(sort file.orig) <(sort file.update) 
sku1,A,A 
sku10,J,MISSING 
sku11,MISSING, CREATED 
sku2,B,B-UPDATED 
sku3,C,C 
sku4,D,D-UPDATED 
sku5,E,E 
sku6,F,F 
sku7,G,G-UPDATED 
sku8,H,H 
sku9,I,I 

Тогда я бы трубу, в awk

join ... | awk -F, -v OFS=, ' 
    $3 == "MISSING" {print "deleted: " $1,$2; next} 
    $2 == "MISSING" {print "added: " $1,$3; next} 
    $2 != $3  {print "updated: " $0} 
' 
deleted: sku10,J 
added: sku11, CREATED 
updated: sku2,B,B-UPDATED 
updated: sku4,D,D-UPDATED 
updated: sku7,G,G-UPDATED 
0

Это может быть очень грубым способом делать это, но если вы уверены, что значения в каждом файле не повторяются, то:

cat file1.txt file2.txt | sort | uniq -u 

Если каждый файл содержит повторяющиеся строки, то вы можете sort|uniq их перед конкатенацией.

Смежные вопросы