The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"diff - пропустить пару строк"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на рабочей станции (Приложения)
Изначальное сообщение [ Отслеживать ]

"diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 11-Апр-21, 12:25 
Добрый день всем!

Есть текстовый файлик на пару сотен тысяч строк, в который команда периодически вносит изменения. Делается ежесуточный бэкап всего этого, но для понимания суточных изменений решили хранить отдельно суточный diff. Есть небольшая проблема - иногда изменений нет нессколько дней, но каждый день программно в начало файла вносится дата. В результате, ежедевно ложится в хранилище пустой по смыслу дифф. Курил ман, искал в гугле - не нашёл, как можно пропустить 1-2 первых строки средствами diff-а? Подскажите, кто знает, плз. Пока удаляем строку с датой. Но мне кажется, это не правильно.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "diff - пропустить пару строк"  +/
Сообщение от Аноним (1), 11-Апр-21, 13:26 
diff <(cat file1 | sed '1,2d') <(cat file2 | sed '1,2d')

Ответить | Правка | Наверх | Cообщить модератору

2. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 11-Апр-21, 17:03 
> diff <(cat file1 | sed '1,2d') <(cat file2 | sed '1,2d')

Спасибо, принцип понятен, но как-то не работает. :(
У меня FreeBSD, пробовал так:
diff -a < ( cat $file.$today | sed '1,2d' ) < ( cat $file.$yesterday | sed '1,2d' )
Missing name for redirect.
diff -a < \( cat $file.$today | sed '1,2d' \) < \( cat $file.$yesterday | sed '1,2d' \)
Ambiguous input redirect.
diff -a < \( grep -v $string $file.$today \) < \( grep -v $string $file.$yesterday \)
Ambiguous input redirect.

Ответить | Правка | Наверх | Cообщить модератору

3. "diff - пропустить пару строк"  +/
Сообщение от Аноним (3), 11-Апр-21, 18:25 
убери пробелы между < и (
Ответить | Правка | Наверх | Cообщить модератору

4. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 11-Апр-21, 20:28 
> убери пробелы между < и (

в sh не помогает. Те же самые "Ambiguous input redirect." и "Missing name for redirect.". :-(

Ответить | Правка | Наверх | Cообщить модератору

7. "diff - пропустить пару строк"  +/
Сообщение от ACCA (ok), 12-Апр-21, 02:49 
А bash поставить вера не позволяет?

В sh будет тебе пляска с бубном:

mkfifo /tmp/f1 /tmp/f2
tail -n +2 file1 > /tmp/f1&
tail -n +2 file2 > /tmp/f2&
diff /tmp/f1 /tmp/f2
wait; wait
rm /tmp/f1 /tmp/f2

Ответить | Правка | Наверх | Cообщить модератору

6. "diff - пропустить пару строк"  +/
Сообщение от Аноним (1), 12-Апр-21, 00:08 
Мое решение под баш.
Я не знаю пути переписать это под чистый шелл или даже под tcsh. Может быть это и невозможно.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

9. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 12-Апр-21, 09:42 
> Мое решение под баш.
> Я не знаю пути переписать это под чистый шелл или даже под
> tcsh. Может быть это и невозможно.

Да нет, в юнихах почти нет слова "невозможно". Просто надо делать как-то по-другому. Вот только man diff и info diff ясности в вопрос как это - "по-другому" пока не привносят. :(

Ответить | Правка | Наверх | Cообщить модератору

13. "diff - пропустить пару строк"  +/
Сообщение от Аноним (1), 12-Апр-21, 19:35 
>надо делать как-то по-другому

Создать два временных файла, например. Но как правило в рабочей установке бсд всегда установлен баш, так что просто уберите команду в bash -c и дело с концом.

Ответить | Правка | Наверх | Cообщить модератору

5. "diff - пропустить пару строк"  +/
Сообщение от Licha Morada (ok), 11-Апр-21, 22:46 
> Есть небольшая проблема - иногда
> изменений нет нессколько дней, но каждый день программно в начало файла
> вносится дата. В результате, ежедевно ложится в хранилище пустой по смыслу
> дифф.

Почему же пустой по смыслу? Это железное свидетельство, что изменений не было. И весит копейки.
Хотя, может быть, для вашей задачи это не релевантно.

Ответить | Правка | Наверх | Cообщить модератору

8. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 12-Апр-21, 09:37 
>> Есть небольшая проблема - иногда
>> изменений нет несколько дней, но каждый день программно в начало файла
>> вносится дата. В результате, ежедневно ложится в хранилище пустой по смыслу
>> дифф.
> Почему же пустой по смыслу? Это железное свидетельство, что изменений не было.
> И весит копейки.
> Хотя, может быть, для вашей задачи это не релевантно.

Оно для нас особой нагрузки пока не несёт. А много мелких файлов забивают фс, и-ноды. Поэтому пока принят такой вариант решения.

Ответить | Правка | Наверх | Cообщить модератору

10. "diff - пропустить пару строк"  +/
Сообщение от Ann None (?), 12-Апр-21, 12:02 
> Добрый день всем!
> Есть текстовый файлик на пару сотен тысяч строк, в который команда периодически
> вносит изменения. Делается ежесуточный бэкап всего этого, но для понимания суточных
> изменений решили хранить отдельно суточный diff. Есть небольшая проблема - иногда
> изменений нет нессколько дней, но каждый день программно в начало файла
> вносится дата. В результате, ежедевно ложится в хранилище пустой по смыслу
> дифф. Курил ман, искал в гугле - не нашёл, как можно
> пропустить 1-2 первых строки средствами diff-а? Подскажите, кто знает, плз. Пока
> удаляем строку с датой. Но мне кажется, это не правильно.

man diff:
...
       -I, --ignore-matching-lines=RE
              ignore changes where all lines match RE
...

читаю маны вслух с выражением. недорого.

Ответить | Правка | Наверх | Cообщить модератору

11. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 12-Апр-21, 13:31 
>[оверквотинг удален]
>> вносится дата. В результате, ежедневно ложится в хранилище пустой по смыслу
>> дифф. Курил ман, искал в гугле - не нашёл, как можно
>> пропустить 1-2 первых строки средствами diff-а? Подскажите, кто знает, плз. Пока
>> удаляем строку с датой. Но мне кажется, это не правильно.
> man diff:
> ...
>        -I, --ignore-matching-lines=RE
>            
>   ignore changes where all lines match RE
> ...

И каким тут должен быть RE? К примеру:
$ diff -a -I *04.2021*  $file$today $file$yesterday
diff: extra operand `$file.$yesterday'
diff: Try `diff --help' for more information

> читаю маны вслух с выражением. недорого.

Так и я могу прочитать. И уже раз пять перечитал, и об эту строчку спотыкался, но придумать-подобрать RE не смог.

Ответить | Правка | Наверх | Cообщить модератору

12. "diff - пропустить пару строк"  +1 +/
Сообщение от Ann None (?), 12-Апр-21, 16:54 
> Так и я могу прочитать. И уже раз пять перечитал, и об
> эту строчку спотыкался, но придумать-подобрать RE не смог.

-I '.*04\.2021.*'

зачитывание введения в регулярные выражения уже будет дороже.

Ответить | Правка | Наверх | Cообщить модератору

14. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 12-Апр-21, 19:40 
>> Так и я могу прочитать. И уже раз пять перечитал, и об
>> эту строчку спотыкался, но придумать-подобрать RE не смог.
> -I '.*04\.2021.*'

А! Вот в каком ключе! Я не сообразил. :( Я про терминирование спецсимволов упустил, каюсь.

> зачитывание введения в регулярные выражения уже будет дороже.

Спасибо за волшебный пендель в правильную сторону!

Ответить | Правка | Наверх | Cообщить модератору

15. "diff - пропустить пару строк"  +/
Сообщение от Аноним (1), 12-Апр-21, 19:47 
В его кейсе нужно убирать дату только из первой строчки, а не из всего файла. Использование этого ключа может спрятать от диффа что-то важное, нельзя так делать.
Новичков надо поражать инженерным умом, а не умением гуглить маны (это любая макака умеет).
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

16. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 13-Апр-21, 11:25 
> В его кейсе нужно убирать дату только из первой строчки, а не
> из всего файла. Использование этого ключа может спрятать от диффа что-то
> важное, нельзя так делать.
> Новичков надо поражать инженерным умом, а не умением гуглить маны (это любая
> макака умеет).

Не, всё нормально - я не смог сам правильно составить RE. Там не просто дата - ещё с реквизитами файла. Коллега своим примером подсказал, где я не так делал. Спасибо всем!

Ответить | Правка | Наверх | Cообщить модератору

17. "diff - пропустить пару строк"  +/
Сообщение от vg (??), 16-Апр-21, 12:03 
Использовать правильный инструмент для хранения текстогого файла, например Git, c добавлением наример git-commit-notifier, и получать сразу красиво оформленный диф по почте
Ответить | Правка | Наверх | Cообщить модератору

18. "diff - пропустить пару строк"  +/
Сообщение от Алдр Бов (?), 16-Апр-21, 17:27 
> Использовать правильный инструмент для хранения текстогого файла, например Git, c добавлением
> наример git-commit-notifier, и получать сразу красиво оформленный диф по почте

Спасибо, мы это рассматривали - до git-а мы ещё не доросли и вряд ли в ближайшей перспективе дорастём: не тот проект.

Ответить | Правка | Наверх | Cообщить модератору

19. "diff - пропустить пару строк"  +/
Сообщение от vg (??), 16-Апр-21, 22:29 
> Спасибо, мы это рассматривали - до git-а мы ещё не доросли и
> вряд ли в ближайшей перспективе дорастём: не тот проект.

Так это ... просто попробуйте, для этого сильно расти не надо. Даже тот же CVS уже больше Вам даст чем скрипт с диф. Гит просто удобнее и многие утилиты есть. И его использование не подразумевает наличие большого проэкта.

Не надо поднимать сразу Гитлаб, или репозиторй где-то. Можно git+ssh для начали, с git-commit-notifier, мы с этим жили достаточно долго даже в большом проэкте. Linux+OpenSSH+Git+Ruby+git-commit-notifier+Postfix.

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

Иногда походящий инструмент пугает

Ответить | Правка | Наверх | Cообщить модератору

20. "diff - пропустить пару строк"  +1 +/
Сообщение от pavlinux (ok), 19-Апр-21, 15:06 
> иногда изменений нет нессколько дней, но каждый день программно в начало файла
> вносится дата. В результате, ежедевно ложится в хранилище пустой по смыслу дифф.

Приходит к тебе начальник и говорит, " - скажи когда у нас не было изменений?"
А ты, - опа,%"№"%4ъыыы*?(?%:омнономном(%;?дык,это,пррррр,вротмненоги.

Ответить | Правка | Наверх | Cообщить модератору

21. "diff - пропустить пару строк"  +/
Сообщение от Licha Morada (ok), 22-Апр-21, 04:40 
>> иногда изменений нет нессколько дней, но каждый день программно в начало файла
>> вносится дата. В результате, ежедевно ложится в хранилище пустой по смыслу дифф.
> Приходит к тебе начальник и говорит, " - скажи когда у нас
> не было изменений?"
> А ты, - опа,%"№"%4ъыыы*?(?%:омнономном(%;?дык,это,пррррр,вротмненоги.

Перед такими предостережениями надо писать "Осторожно, спойлеры!".


Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Ideco
A-Real
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру