Сравнение CSV-файлов
Я хочу написать сценарий оболочки для сравнения двух файлов.csv. Первый содержит имя файла, путь второй.csv файл содержит имя файла,paht,target. Теперь я хочу сравнить два CSV-файла и вывести целевое имя, где файл из первого CSV-файла существует во втором CSV-файле.
Ex.
a.csv
build.xml,/home/build/NUOP/project1
eesX.java,/home/build/adm/acl
b.csv
build.xml, / дома / сборки / NUOP / project1, M1
eesX.java, / дома / сборки / ADM / ACL, M2
ddexse3.htm, / дом / класс / ADM /33eFg
Я хочу, чтобы результат был примерно таким.
М1 и М2
Пожалуйста, помогите Спасибо,
3 ответа
Если вам не обязательно нужен сценарий оболочки, вы можете легко сделать это на Python следующим образом:
import csv
seen = set()
for row in csv.reader(open('a.csv')):
seen.add(tuple(row))
for row in csv.reader(open('b.csv')):
if tuple(row[:2]) in seen:
print row[2]
Попробуйте http://sourceforge.net/projects/csvdiff/
Цитата: csvdiff - это Perl-скрипт для сравнения / сравнения двух CSV-файлов с возможностью выбора разделителя. Различия будут отображаться так: "Колонка XYZ в записи 999" отличается. После этого будет показан фактический и ожидаемый результат для этого столбца.
Если эти M1 и M2 всегда в полях 3 и 5, вы можете попробовать это
awk -F"," 'FNR==NR{
split($3,b," ")
split($5,c," ")
a[$1]=b[1]" "c[1]
next
}
($1 in a){
print "found: " $1" "a[$1]
}' file2.txt file1.txt
выход
# cat file2.txt
build.xml,/home/build/NUOP/project1,M1 eesX.java,/home/build/adm/acl,M2 ddexse3.htm,/home/class/adm/33eFg
filename, blah,M1 blah, blah, M2 blah , end
$ cat file1.txt
build.xml,/home/build/NUOP/project1 eesX.java,/home/build/adm/acl
$ ./shell.sh
found: build.xml M1 M2