Создание сценария оболочки внутри текстового редактора

У меня нет большого опыта работы с awk, но я подумал, что стоит попробовать. Я полагаю, что это довольно хрупко, поскольку я не знаю, сколько строк журнала вы пытаетесь получить с помощью этого.

Как бы то ни было, здесь используется блок BEGIN для настройки выбираемых переменных и строка формата для печати перед отображением заголовка. Время и EmailTo предсказуемы, поэтому можно использовать пронумерованные поля ( $ 1 , $ 2 и $ 5 ) перед тремя наборами регулярных выражений, которые являются очень приблизительными. . Будем признательны за любые предложения по улучшению!

awk 'BEGIN {
        from=""; ip=""; error=""; fstr="%-24s%-24s%-40s%-16s%s\n";
        printf(fstr, "Timestamp:", "EmailTo:", "EmailFrom:", "IPAddress:", "ErrorCodes:");
    }
{   for (i=6; i<NF; i++)
    {   
    # From Address
    if ($i ~ /FROM:<[^ ]*>/)  
        from=substr($i, 7, length($i)-7);
    # Errors found in two adjacent fields.
    if ($(i-1) ~ /[[:digit:]]{3}/ && $i ~ /[[:digit:]]\.[[:digit:]]\.[[:digit:]]/)
        error=$(i-1) " " $i;
    # From address after predictable string.
    if ($(i-2) " " $(i-1) == "Messages from" && $i ~ /[[:digit:].]{7,15}/)
        ip=$i;
    }
    printf(fstr, $1" "$2, $5, from, ip, error);
}' logs
1
16.12.2018, 13:50
3 ответа

То, что вам нужно, называется функцией :

#!/bin/bash

max() {
  if [ "$1" -gt "$2" ] ;
  then
    printf %s\\n "$1"
  else
    printf %s\\n "$2"
  fi
}

max 4 6
max -2 -5
max 7 -3

Дополнительная литература:

10
27.01.2020, 23:11

Вы можете сделайте то, о чем вы просите, вот так:

#!/bin/bash
mkdir -p temp
cd temp

cat <<\_script_lines_ > max.sh
#!/bin/bash
if [ "$1" -gt "$2" ] ;
then
    printf '%s\n' "$1"
else
    printf '%s\n' "$2"
fi
_script_lines_

chmod u+x max.sh             ### make the script excutable.

# Use the script:
./max.sh 4 6
./max.sh -2 -5
./max.sh 7 -3

Но функция, уже рекомендованная Wildcard, кажется более разумной для использования.

3
27.01.2020, 23:11

Если вы чувствуете себя готовым к программированию, вы можете получить скрипт для открытия второго или даже третьего окна консоли и использовать их для ввода/вывода, как чтение, запись из других файлов, но используя консоли вместо этого.

Я не знаю, каков синтаксис bash, вам нужно погуглить или спросить на stackoverflow.

0
27.01.2020, 23:11

Теги

Похожие вопросы