LINUX.ORG.RU

Сравнение файлов

 


0

1

Добрый день!

Стоит следующая задача - есть директория в которой хранятся файлы, нужно сравнить последние 6 строк каждого файла(взяв часть строки после последнего знака "-") с эталонным файлом, и найти совпадающие.

Пока сделала так:

 for i in `find /home/test_dir/ -type -f -mtime -1`; do echo "$i"; tail -n6 $i | sed '/.*-//g'; done

То есть для каждого файла выводятся обрезанные 6 строк. А как можно теперь проверить на совпадение их с эталоном?

$ cat source.txt
line 1 
line 2
...
line 6

$ for i in `find /home/test_dir/ -type -f -mtime -1`; do \
     tail -n6 $i | sed '/.*-//g' > tmp.txt; \
     cmp source.txt tmp.txt; \
done

например так. source.txt - то, с чем надо сравнить (если я правильно понял задачу)

marvin_yorke ★★★
()
Последнее исправление: marvin_yorke (всего исправлений: 1)
Ответ на: комментарий от marvin_yorke

Немного не так - эталонный файл содержит 6 строк, нужно найти файлы в директории, у которых последние 6 строк такие же

mmm-crash
() автор топика

Стоит следующая задача - есть директория в которой хранятся файлы,

нужно сравнить последние 6 строк каждого файла(взяв часть строки после последнего знака "-") с эталонным файлом, и найти совпадающие.

не нужно выносить find после in, find сама умеет выполнять команды.

На счёт строк совершенно непонятно - надо что-бы 6 последних были равны 6и эталонным(тогда man cmp) или надо что-бы среди 6и посл. нашлись-бы несколько эталонных (grep 6 раз ИМХО проще всего)?

drBatty ★★
()
Ответ на: комментарий от mmm-crash

find -exec tail -n6 {} | cmp test_file -ls

как-то так. -exec вернёт true и выполнит -ls если cmp вернёт 0, а 0 она вернёт если вывод tail равен test_file.

drBatty ★★
()
Ответ на: комментарий от mmm-crash
$ for i in `find /home/test_dir/ -type -f -mtime -1`; do \
     tail -n6 $i | sed '/.*-//g' > tmp.txt; \
     cmp source.txt tmp.txt 2>&1 >/dev/null && echo $i; \
done

покажет имена файлов, для которых строки совпадают, для других - ничего

marvin_yorke ★★★
()
Ответ на: комментарий от marvin_yorke

Спасибо! а можно ли сделать так, чтобы некоторые символы при сравнении игнорировались?
Например, в эталонном файле строки:
qwer 12
asdf ghhj
xcv 45 nmjkl

А в файле:
qwer 23
asdf ghhj
xcv 99 nmjkl

Тут разные цифры в файлах, все остальное идентично. Нужно, чтобы при сравнении они были показаны как одинаковые.

mmm-crash
() автор топика
Ответ на: комментарий от mmm-crash

простым способом врядли. вы б на pastebin выложили пример файла хотя бы

marvin_yorke ★★★
()
Ответ на: комментарий от mmm-crash

Можно перед сравнением заменять игнорируемые символы на как-то другой пропуская, например, через tr:

... | tr 0-9 x | ...
xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.