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

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

Мой вопрос: как сравнить две строки в двух отдельных файлах? По сути у меня есть два файла, file1 содержит строку:

${X##*a}

file2 содержит строку:

baaabaabab

Я попробовал следующее:

diff -u file1 file2 > file3

но это не дает aaaaтого, что должно. Также оба файла не всегда одинаковы, но разница всегда в начале строки.


Я изменил свою программу так, что теперь у меня есть две переменные: одна с aaaabaaabaababи одна с a. Теперь я могу сделать следующее:

echo ${var1##*$var2} > tempfile.txt

tempfile содержит baaabaabab. Но как мне получить aaaa? Я думал о:

echo ${var1//*$var2} > tempfile.txt

но это не работает.

решение1

diffработает на основе каждой строки. Так что если строки отличаются хотя бы на один символ, то diff считает их разными.

Одна вещь, которую вы могли бы сделать в вашем случае, это преобразовать ваши входные данные таким образом, чтобы каждый символ находился на своей строке. Команда foldпомогает в этом. Так что вы могли бы сделать что-то вроде:

$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$ 

Это работает только в том случае, если ваши входные файлы действительно содержат только одну строку.

Я не знаю, полезен ли вам этот формат вывода. Если вам буквально нужна строка "aaaa", и вы абсолютно уверены, что разница будеттольков одном месте в строках ввода, то вы можете передать вышеуказанный вывод через awk:

$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$ 
$

решение2

Вот способ с помощью Perl удалить содержимое второго файла из содержимого первого, а затем вывести оставшуюся часть из первого файла в выходной файл:

perl -e '$x=<>; $y=<>; $x=~s/$y//; print $x' 1.txt 2.txt > out.txt

Связанный контент