Мой вопрос: как сравнить две строки в двух отдельных файлах? По сути у меня есть два файла, 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