Объединение и расширение файловой системы LVM с шифрованием LUKS

Я думаю, что вы ищете что-то вроде

grep -vf safe_websites inputfile

-v , чтобы инвертировать совпадения, которые вы уже знаете, и -f , чтобы получить шаблоны из файла safe_websites .

2
01.04.2019, 17:24
4 ответа

Попытался использовать описанный ниже метод, и он работал нормально

for i in `cat k.txt| awk  -F "=" '{print $2}'| awk -F "," '{print $1}'| sed -r "s/\s+//g"| sort| uniq`; do sed -n '/'$i'/p' k.txt|sed '1s/$/\+/g'| sed "N;s/\n/W02\//g";done

выход

for i in `cat k.txt| awk  -F "=" '{print $2}'| awk -F "," '{print $1}'| sed -r "s/\s+//g"| sort| uniq`; do sed -n '/'$i'/p' k.txt|sed '1s/$/\+/g'| sed "N;s/\n/W02\//g";done

REQUEST  2019-01-16 00:32:07.809@{fields}@SeqID     = 9515+
REQUEST  2019-01-16 00:32:07.809@{fields}@SeqID     = 9517+W02/RESPONSE 2019-01-16 00:32:07.809@{fields}@SeqID     = 9517, Partner SeqID = 3393
REQUEST  2019-01-16 00:32:07.810@{fields}@SeqID     = 9520+W02/RESPONSE 2019-01-16 00:32:07.810@{fields}@SeqID     = 9520, Partner SeqID = 3395
praveen@praveen:~$ 
0
27.01.2020, 22:08

Я попробовал следующий код, но это занимает слишком много времени для большого файла:

awk '{
    if ($0 ~ /REQUEST/ && $0 ~ /RPCLIB/)
        {seqid = $0; sub(/^.*@SeqID/,"SeqID",seqid);
        line_req = $0; line_resp = "";
        rng_s = NR; rng_e = NR + 99999;
        cmd = "awk '\''/RESPONSE.*" seqid "/ && NR >= " rng_s " && NR <= " rng_e " {print $0;exit}'\'' logfile"
        cmd | getline line_resp;
        close(cmd);
        print line_req"+"line_resp;
        }
    }
    ' logfile
0
27.01.2020, 22:08

Я не могу комментировать, поэтому публикую свой комментарий как ответ, извините за это.
Вы хотите присоединиться к ЗАПРОСУ и ОТВЕТУ, если их seqid совпадают, верно? Почему бы сначала не отсортировать данные по seqid? Он будет следить за тем, чтобы ОТВЕТ всегда следовал за ЗАПРОСОМ.

1
27.01.2020, 22:08

Я не могу помочь вам с awk, но я сделал этот Bash-скрипт, который делает это.

Требуется по крайней мере Bash v4 , но это должно быть довольно широко распространено..

Он ожидает ввода со стандартного ввода, а это означает, что вам нужно вызвать его, как в:

cat logfile | script.sh

или также:

script.sh < logfile

Я сделал это намеренно, думая, что это может быть желательно, но легко внедрить имя файла в сценарий, например, просто. добавив его в команду cat -nперед |.

Он обрабатывает:

  • пропущены ответы
  • повторяющиеся запросы,присоединение к ответу на последний найденный запрос с этим идентификатором
  • принимает поля SeqID после знака @ -(см. регулярное выражение в первой команде sed)
  • использует литеральные регулярные выражения REQUEST и RESPONSE в качестве критериев для различения записей(см. блок кода if-elif-else-fi)
  • объединяет совпадающие пары req/resp с+

ХТХ

#!/bin/bash

declare -A reqs=()

{
while IFS= read -r line ; do
    read -r seqid rest <<<"${line}"
    line="${line#${seqid} }"
    if [[ "${line}" =~ REQUEST ]] ; then
        [ "${reqs[$seqid]}" ] && printf '%s+\n' "${reqs[$seqid]}"
        reqs[$seqid]="${line}"
    elif [[ "${line}" =~ RESPONSE ]] && [ "${reqs[$seqid]}" ] ; then
        printf '%s+%s\n' "${reqs[$seqid]}" "${line}"
        unset reqs[$seqid]
    else
        printf 'strange record at line no. %s\n' "${line}" >&2
    fi
done < <(cat -n | sed -e 's/\(.*@\)SeqID *= *\([0-9]\+\)\(.*\)/\2 &/') ;
printf '%s+\n' "${reqs[@]}" ;
} | sort -k 1 | sed -e 's/\(^\|+\)[[:blank:]]\+[0-9]\+[[:blank:]]\+/\1/g'
1
27.01.2020, 22:08

Теги

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