Построчное сравнение txt файлов
-
Как сравнить строки в 2 текстовых файлах и посчитать уникальные строки в file1.txt и вывести их в отдельном файле в формате содержимого file1.txt, если:
1. Содержимое file1.txt:
12345:qidhiqe
23456:348wic
34567:2y7dfg73
18278:edui
45678:38fdh83
2. Содержимое file2.txt:
12345
23456
34567
45678
39213
Я только еще изучаю Linux и, в частности, терминал, поэтому туплю и не могу сообразить, как это сделать и реально ли это сделать только с помощью терминала. Если реально - то какими командами?
Как бы, есть предположение, относительно команды diff, но пока ничего толкового у меня не вышло -
Так ты не можешь diff запустить, в чем проблема?
Попробуй такие варианты:diff file1.txt file2.txt > raznica1.diff diff file2.txt file1.txt > raznica2.diff
Полученные diff-файлы лучше просматривать в mc по F4 - он подсвечивает, что добавилось, что убавилось.
Если хочешь в графике сравнивать, то есть программы Meld, Kompare. -
diff'ом у меня получается не то, что нужно, в т.ч. приведенным выше примером. А именно: я получаю файл, в котором содержатся абсолютно все строки из file1.txt и часть строк из file2.txt.
Возможно, я не особо четко сформулировал вопрос. Перефразирую:
Берем file1.txt и сравниваем строки из него со строками в file2.txt. Строки из file1.txt, которые не будут найдены в file2.txt, считаем уникальными, вот они-то нам и нужны. Эти строки и нужно вывести отдельно -
xKDE:
Тогда по Вашей логике 18278:edui = 18278 и это, в принципе, просто! Если же нет, строка будет сложнее...Yapriehal:В моем случаи 12345:qidhiqe =12345. Ну, или все, что после ":" не учитывается
Именно так стоит передо мной задача - это данность.
Так подскажите, какое решение? То, что я мог попробовать, в силу своей неопытности, уже попробовал - правильных решений не нашел на данный момент -
От простого к более простому:
txt добавите сами, в linux это не принципиально. Последний вариант для простоты сравнивает первые 5 символов, первые два -ищут разделитель ":".grep `awk -F":" '{ print $1 }'<file1|grep -Fxvf file2` file1 > file3 grep `cat file1| sed -r 's/:.+//'|grep -Fxvf file2` file1 > file3 sort file2 file1 file2 | uniq -u --check-chars=5 > file3
И таких вариантов реализации ещё достаточно много...
P.S.: если в конце уберете "> file3", то получите вывод прямо в терминал.