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

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

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="" )

  • Shell: как использовать 2 переменные с условием
  • Отложить переменное расширение до подоболочки
  • Назначить имя хоста переменной в ksh
  • как получить или отразить имя вызываемой функции bash?
  • bash - добавить пустую строку в heredoc через переменную
  • Передача переменной из одного сценария в другой
  • перечислить файлы и сохранить их в переменных
  • Область переменных в while-read-loop на Solaris
  • Как передать переменную в sftp?
  • Как выбрать количество цифр в переменной в моих сценариях?
  • шаблон awk с переменной в скрипте bash
  • Interesting Posts

    Какова цель настройки программного моста в RHEL? Как мы используем его в виртуализации?

    rpcbind- "предупреждение" при загрузке

    Как префикс значений столбца с апострофом (')?

    Что означает этот ключевой код?

    Как установить значение для mteHotContextName при использовании процесса мониторинга в SNMP

    Использование USB-накопителя в качестве рабочего диска / разделов (ов), на которых я создаю Linux From Scratch?

    Как читать альтернативные файлы конфигурации gnome

    Как запустить команду для каждого номера в диапазоне

    Предпочтение IP-псевдонимов

    Как удалить файлы только, но сохранить структуру каталогов?

    вложенные двойные кавычки в сильно проголосовавшем однострочном

    извлекать строки из большого файла с разделителями табуляции, используя список

    Как удалить самый старый каталог в данном каталоге?

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

    Рекурсивно сравнить два каталога с diff-r без вывода на неработающие ссылки

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