The OpenNET Project / Index page

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



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

"Сравнить вывод двух команд, найти разницу"  –1 +/
Сообщение от Seryoga2014 (ok) on 31-Окт-17, 19:01 
Есть две некие команды, которые выдают довольно большой объём данных в виде таблиц. Таблицы разные, но в них есть схожая информация. В первой таблице среди прочего в двух столбцах есть комбинации неких чисел и во второй, в других столбцах и строчках есть такие же пары. Мне надо найти разницу - некоторых пар чисел не хватает, надо найти каких именно.

Как выделить из вывода каждой из команд нужные мне пары чисел и вывести их - я знаю (допустим, с помощью awk). Но как их потом сравнить между собой и, желательно, без промежуточных файлов? Как-то можно в grep прикрутить вывод другой команды, отфильтрованный с помощью awk? Или ещё какие-то методы есть?

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

Оглавление

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


1. "Сравнить вывод двух команд, найти разницу"  +1 +/
Сообщение от ACCA (ok) on 31-Окт-17, 19:33 
Тебя понять невозможно. Покажи пример -
* кусок первой таблицы
* кусок второй
* результат
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Seryoga2014 (ok) on 01-Ноя-17, 17:39 
Таблица1
M  qra   -abc  201  -adc  72  -lll  8275   -wem  5      | true  mmm  9402
M  qra   -abc  201  -adc  72  -lll  8276   -wem  676    | true  mmm  9402
M  qra   -abc  201  -adc  72  -lll  8277   -wem  677    | true  mmm  9402

Таблица2
M  sb_rd   -zxt  shut-st   -abc  201  -adc  72  -lll  8276   -wem  676  
M  sb_rd   -xzt  shut-st   -abc  201  -adc  72  -lll  8275   -wem  5  
M  sb_rd   -zxt  shut-st   -abc  201  -adc  72  -lll  8277   -wem  677
M  sb_rd   -zxt  shut-st   -abc  201  -adc  72  -lll  8277   -wem  877

Каждая из этих таблиц очень длинные (результат вывода двух разных команд). Меня интересуют пары столбцов с числами после -lll и -wem. Значения в строках связаны между собой. Какой пары из первой таблицы не хватает во второй таблице? Т.е. нужно найти 8277 877. Надеюсь понятней объяснил на этот раз.

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

3. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Seryoga2014 (ok) on 01-Ноя-17, 18:51 

Таблица1
M  qra   -abc  201  -adc  72  -lll  8275   -wem  5      | true  mmm  9402
M  qra   -abc  201  -adc  72  -lll  8276   -wem  676    | true  mmm  9402
M  qra   -abc  201  -adc  72  -lll  8277   -wem  677    | true  mmm  9402
M  qra   -abc  201  -adc  72  -lll  8277   -wem  877    | true  mmm  9402

Таблица2
M  sb_rd   -zxt  shut-st   -abc  201  -adc  72  -lll  8276   -wem  676  
M  sb_rd   -xzt  shut-st   -abc  201  -adc  72  -lll  8275   -wem  5  
M  sb_rd   -zxt  shut-st   -abc  201  -adc  72  -lll  8277   -wem  677

Пардон, так правильней )

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

4. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от ACCA (ok) on 01-Ноя-17, 22:45 
Ну, как-то так:

comm -3 <(sed 's/  */ /g' table1 | cut -d\  -f 8,10|sort -b) <(sed 's/  */ /g' table2 | cut -d\  -f 10,12|sort -b)

man comm - убедись, что ты понимаешь что он тебе ответил.

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

5. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Seryoga2014 (ok) on 02-Ноя-17, 16:20 
Спасибо. Я бы такую конструкцию вряд ли бы сочинил (про comm что-то даже и не слышал). Читать придётся не только про comm для полного понимания.

command1 | awk -F " " '{print $8" "$10}' - я так получал список чисел 8277 877 из вывода command1 (результат её работы - таблица1).

Правильно ли я понимаю, что тут не выводы двух команд (command1, command2) как-то сравниваются без создания промежуточных файлов (в первом сообщении писал об этом), а создаются два файла table1 и table2, которые затем обрабатываются?

В общем я получил такое:
comm -3 <(sed 's/  */ /g' table1.txt | cut -d\  -f 8,10|sort -b) <(sed 's/  */ /g' table2.txt | cut -d\  -f 10,12|sort -b)
Missing name for redirect.

Буду разбираться..

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

6. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Andrey Mitrofanov on 02-Ноя-17, 17:52 
> Спасибо. Я бы такую конструкцию вряд ли бы сочинил (про comm что-то
> даже и не слышал). Читать придётся не только про comm для
> полного понимания.
> command1 | awk -F " " '{print $8" "$10}' - я так
> получал список чисел 8277 877 из вывода command1 (результат её работы
> - таблица1).

Кстати, если сравнивать "прямо в awk-е, то [c bash-мизмами, может, и с gawk-измами] :

awk 'ARGIND==1{ >>>тут кладём $8 и $10 в один массив/хэш<<< }
ARGIND==2{ >>>тут кладём в другой массив данные из другой команды<<< }
END{ >>>а тут скрещиваем массивы и выводим результат<<<}
' <( commnad1)  <( commnad2)


Если данных для вывода достаточно уже на втором шаге ("кладём в другой массив"), то его можно "укоротить"-смержить с выводом-скрещиванием из END-а -- делать их прямо там.

> Missing name for redirect.
> Буду разбираться..

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

7. "Сравнить вывод двух команд, найти разницу"  +1 +/
Сообщение от ACCA (ok) on 03-Ноя-17, 22:27 
> этом), а создаются два файла table1 и table2, которые затем обрабатываются?

Не создаются, а я предположил, что твои команды уже создали table1.txt и table2.txt
Для команд просто:

comm -3 <(command1 | sed 's/  */ /g' | cut -d\  -f 8,10|sort -b) <(command2 | sed 's/  */ /g' | cut -d\  -f 10,12|sort -b)

> В общем я получил такое:
> comm -3 <(sed 's/  */ /g' table1.txt | cut -d\  
> -f 8,10|sort -b) <(sed 's/  */ /g' table2.txt | cut
> -d\  -f 10,12|sort -b)
> Missing name for redirect.

Есть мнение, что ты тут соврал - сюда скопировал команду из моего сообщения, а по факту запускал что-то другое, например с пробелами между `<' и `('. Ещё обрати внимание, что после -d\ - два пробела с разным смыслом. Первый - аргумент для -d, второй разделитель - перед -f.

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

8. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от DiJey email(ok) on 10-Ноя-17, 11:38 
если еще актуально, нужно у автора уточнить что за ОС и её версия, и в каком шеле запускает.
У мена на Rhel 7.4 данная команда так же верно отрабатывает.
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Seryoga2014 (ok) on 14-Ноя-17, 10:47 
> если еще актуально, нужно у автора уточнить что за ОС и её
> версия, и в каком шеле запускает.
> У мена на Rhel 7.4 данная команда так же верно отрабатывает.

Wind River Linux

echo $SHELL
/bin/tcsh

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

10. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Seryoga2014 (ok) on 14-Ноя-17, 11:03 
> echo $SHELL
> /bin/tcsh

Из под bash работает. Спасибо :)

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

11. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от ACCA (ok) on 18-Ноя-17, 12:59 
> Wind River Linux
> echo $SHELL
> /bin/tcsh

Ты бы ещё psh от DataStage себе поставил. Стесняюсь предположить, как ты пользуешься задним отверстием...

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

12. "Сравнить вывод двух команд, найти разницу"  +/
Сообщение от Seryoga2014 (ok) on 23-Ноя-17, 17:55 
>> Wind River Linux
>> echo $SHELL
>> /bin/tcsh
> Ты бы ещё psh от DataStage себе поставил. Стесняюсь предположить, как ты
> пользуешься задним отверстием...

Вообще-то это специализированная железка за гору денег, готовое решение, т.е. я там ничего не ставил, не выбирал, оно так было и что-то там менять, устанавливать своё крайне не желательно - железка на поддержке и с этим могут возникнуть проблемы. Специфичные команды работают полноценней из того, что стартует по умолчанию при подключении по ssh. Уж не знаю чем там руководствовались создатели, подбирая shell, но вероятно это не от балды, как и выбор дистрибутива.

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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