Несколько входов в одной команде

У меня есть что-то вроде этого:

Error_code=1; num=5; Error_code=2; num=7; Error_code=3; num=9; Error_code=1; num=2; Error_code=2; num=5; 

, , ,

И много кодов ошибок (около 100). Предположим, что файл называется performance.log

Как я могу использовать одну команду? Каждый раз, когда код ошибки отличается. У меня есть что-то вроде этого:

 grep -i "error_code=$x;" performance.log | \ awk -F";" '{print $2}' > $x_error_code.txt 

Поэтому каждый раз переменная x является новым значением, определенным из кода ошибки, и когда коды ошибок заканчиваются, сценарий заканчивается.

3 Solutions collect form web for “Несколько входов в одной команде”

Один скрипт awk мог бы все это сделать. Это также можно сделать с помощью чистого сценария оболочки Bourne, как показано ниже:

 grep -E -o '[[:digit:]]+; num=[^;]+' performance.log \ | while IFS="; " read n num; do echo "$num" >> "${n}_error_code.txt" done 

grep часть извлекает подстроку « EEE; num=NNN » из ваших строк « Error_code=EEE; num=NNN; ». Цикл while считывает EEE и num=NNN и записывает последнее в EEE_error_code.txt

Если вас интересует только один конкретный код ошибки (EEE ниже), вы можете изменить команду grep :

 grep -E -o '\<EEE; num=[^;]+' performance.log | while ... 

Если вас интересует небольшой набор кодов ошибок (EEE1 … EEEn ниже), вы можете изменить команду grep на:

 grep -E -o '\<(EEE1|EEE2|...|EEEn); num=[^;]+' performance.log | while ... 
 sed -n "/Error_code=$x/s/^[^ ]* //p" > $x_error_code.txt 

Я бы сделал это только с awk.

Этот файл сканирует файл и генерирует один файл для каждого типа ошибки

 $ ex="";awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k] >k"error_code.txt"}' performance.log 

Если вы хотите «исключить» некоторые ошибки, вы можете соответствующим образом изменить значение переменной оболочки ex, например, ex="2|3" (исключить 2 или 3)

Контрольная работа:

 $ echo "$c" Error_code=1; num=5; Error_code=2; num=7; Error_code=3; num=9; Error_code=1; num=2; Error_code=22; num=5; $ ex="";echo "$c" |awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k],k}' num=5 num=2 1 num=7 2 num=9 3 num=5 22 $ ex="22|1";echo "$c" |awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k],k}' num=7 2 num=9 3 

С другой стороны, если вы хотите сопоставить определенные шаблоны вместо исключения шаблонов, вы можете сделать это так:

 $ inc="1";awk -F"[;=]" -v inc=$inc '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k~inc || inc=="") print a[k] >k"error_code.txt"}' performance.log 

Примените к var inc (include) коды ошибок, которые вы хотите распечатать, или оставьте пустым, чтобы включить все ошибки. ( inc="" )

  • Поведение задания массива
  • Невозможно выполнить сценарий Bash, если / while
  • Как передать переменную в sftp?
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • Развертывание Jenkins не передается переменной java
  • Передать переменную с помощью EOF и использовать переменную хоста
  • Как назначить вывод команды переменной без запуска команды в подоболочке?
  • Присвоение нового значения непосредственно в индекс символа значения в массиве с zsh
  • Вставка переменных в команду в сценарии оболочки
  • Установка переменной со значением по умолчанию ведет себя по-другому, если перед командой?
  • Столкновение видимых переменных переменных
  • Interesting Posts

    Что такое чистый шрифт sans, поддерживающий UTF-8, который подходит для использования в консоли?

    rsync: продолжить или в произвольном порядке

    Что делает опцион конфигурации «virtual_private» Openswan под капотом?

    Таинственный файл, который я не могу удалить

    Почему BSD использует конкретные имена драйверов для сетевых интерфейсов? Это подразумевает ограничения?

    Время доступа к файлу не обновляется в ubuntu 12.04

    Есть ли полезный интерфейс gui для Linux?

    Шифрование каталогов с помощью gpg

    Как я получил git-коммиты, чтобы появиться в автозаполнении?

    Почему root не может открыть псевдотерминал? (доступ запрещен)

    Совместное использование псевдонимов и настроек PATH между zsh и bash

    Как перевести USB 3.0 на USB 2.0?

    X11: Клиент не авторизовался при вызове с помощью sudo

    поврежден раздел

    Есть ли какая-либо программа для обеспечения согласованного интерфейса для нескольких типов архивов?

    Linux и Unix - лучшая ОС в мире.