The OpenNET Project / Index page

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



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

"Сравнить вывод двух команд, найти разницу"  –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ообщить модератору

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

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


  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor