Сценарии оболочки - как правильно анализировать вывод, изучая примеры. - PullRequest
1 голос
/ 14 февраля 2012

Итак, я хочу автоматизировать ручное задание с помощью сценариев оболочки, но я немного растерялся относительно того, как анализировать вывод нескольких команд.Я мог бы сделать это на других языках без проблем, поэтому я просто объясню, что я собираюсь сделать в коде psuedo, и приведу пример вывода cmd, который я пытаюсь проанализировать.

Примервыходных данных:

Chg 2167467 от 2012/02/13 по user1234 @ имя файла 'описание представления'

Мне нужно разобрать '2167467'.Поэтому я хочу разделить пробелы и взять элемент 1 для использования в другой команде.Вывод моей следующей команды выглядит следующим образом:

Изменить 2167463 на user1234 @ filename 2012/02/13 18: 10: 15

   description of submission

Затрагиваемые файлы ...

... // filepath / dir1 / dir2 / dir3 / filename # 2298 edit

Мне нужно разобрать '// filepath / dir1 / dir2 / dir3 / filename #2298 'и использовать это в другой команде.Опять же, то, что я хотел бы сделать, это удалить пустые строки из вывода, захватить 4-ю строку и разделить на пробелы.Оттуда я бы взял 1-й элемент из группы split и использовал его в своей следующей команде.

Как я могу сделать это в сценариях оболочки?Примеры или указание на некоторые учебники было бы здорово.

Ответы [ 3 ]

1 голос
/ 14 февраля 2012

Непонятно, хотите ли вы использовать результат первой команды для обработки второй команды. Если это правда, то

targString=$( cmd1 | awk '{print $2}')
command2 | sed -n "/${targString}/{n;n;n;s@.*[/][/]@//@;p;}"

Данные вашего примера содержат 2 разных значения Chg (2167467, 2167463), поэтому, если вы просто хотите обработать эти выходные данные двумя разными способами, это еще проще

cmd1 | awk '{print $2}'
cmd2 | sed -n '/Change/{n;n;n;s@.*[/][/]@//@;p;}'

Надеюсь, это поможет.

0 голосов
/ 14 февраля 2012

Ваша первая переменная будет выглядеть примерно так

temp="Chg 2167467 on 2012/02/13 by user1234@filename 'description of submission'"

Чтобы получить номер, который вы хотите сделать:

temp=`echo $temp | cut -f2 -d" "`

Пусть вывод вашей второй команды будет сохранен в файле, похожем на этот

command $temp > file.txt

Чтобы получить то, что вы хотите из файла, вы можете запустить это:

temp=`tail -1 file.txt | cut -f2 -d" "`
rm file.txt

Последний блок кода получает последнюю небелую строку файла и разграничивает второй набор пробелов

0 голосов
/ 14 февраля 2012

Я не уверен на 100% по вашему вопросу, но я бы использовал awk.

http://www.cyberciti.biz/faq/bash-scripting-using-awk/

...