Сравнение двух текстовых файлов

У меня есть 2 больших файла csv, file1.csv, который выглядит так

1,2,3,4
1,4,5,6
1,7,8,9
1,11,13,17

file2.csv, который выглядит так

1,2,3,4
1,7,8,9
2,4,9,10
13,14,17,18

Это просто случайные числа, которые Я составил, в основном два числа, которые идентичны, и отсортированы. Я хочу сравнить file1.csv и file2.csv, а затем скопировать строки, которые присутствуют в файле file1.csv, но не в file2.csv в file3.csv. разделитель запятой, очевидно,

Я попробовал

comm -2 -3 file.csv file2.csv > file3.csv

, и я попробовал

diff -u file.csv file2.csv >> file3.csv

Оба не работали, потому что file3 был больше, чем file1 и file2 , Я пробовал разные команды diff и comm, иногда это больше, чем файл2 и примерно того же размера, что и файл file1, я знаю, что file3 должен быть значительно меньше по размеру, чем file1 и file2. И, конечно, я смотрел файл3, а не те результаты, которые мне нужны

. В этот момент я знаю, что это можно сделать с помощью diff или comm, но я не знаю, какую команду использовать.

1
задан 7 November 2014 в 19:29

3 ответа

Чтобы использовать comm, вы должны сначала отсортировать строки.

comm -23 <(sort file1.csv) <(sort file2.csv) > file3.csv
7
ответ дан 24 May 2018 в 02:05

Параметр python:

#!/usr/bin/env python3

import sys

def readfile(file):
    with open(file) as src:
        return [line.strip() for line in src.readlines()]

lines_1 = readfile(sys.argv[1]); lines_2 = readfile(sys.argv[2])

for line in lines_1:
    if not line in lines_2:
        print(line)

Выход:

1,4,5,6
1,11,13,17

Вставьте скрипт в пустой файл как extract.py, сделайте его исполняемым и запустите его командой :

<script> <file_1> <file_2>

Или записать его непосредственно в файл_3:

<script> <file_1> <file_2> >file_3
3
ответ дан 24 May 2018 в 02:05

Использование команды diff делает grep и не требует сохранения.

Выводит, если строки существуют в файле1, но не в файле2:

$ diff file{1,2}.csv | grep -Po "^< \K.*"
1,4,5,6
1,11,13,17

И вывод, если строки существуют в файле2, но не в файле1, просто изменив левый угол (<) на правый угол (>):

$ diff file{1,2}.csv | grep -Po "^> \K.*"
2,4,9,10
13,14,17,18
3
ответ дан 24 May 2018 в 02:05

Другие вопросы по тегам:

Похожие вопросы: