Анализ конкретной информации

вы можете использовать следующий dcфрагмент, чтобы получить результат:

$ dc -e "3k $x 1000/p"
1
18.10.2021, 18:06
2 ответа

Если я правильно вас понял:

$ tr -s '\n' ' ' < file | \
  sed 's/client:/\n/g' | \
  grep -o 'hostname: [^ ]\+ connection-0.*Purple\|hostname: [^ ]\+ $' | \
  cut -d' ' -f2
tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  • $ tr -s '\n' ' 'преобразует файл в одну строку.

  • sed 's/client:/\n/g'заменяет «клиент» на новую строку.

  • grep -o 'hostname: [^ ]\+ connection-0.*Purple\|hostname: [^ ]\+ $'фиксирует линии, имеющие «соединение -0...Фиолетовый», или линии, не имеющие соединений.

    hostname: tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx connection-0: frdp::Purple
    hostname: tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 
    hostname: tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx connection-0: frdp::Purple
    hostname: tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx connection-0: frdp::Purple
    hostname: tc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx connection-0: frdp::Purple
    
  • cut -d' ' -f2вывести только имена хостов.


Для записи в новый файл добавьте > newfile.

1
18.10.2021, 19:16

Использование любого awk в любой оболочке на каждом компьютере Unix:

$ cat tst.awk
$1 == "client:" {
    prt()
}
/connection/ {
    gotConns = 1
    if ( /Purple/ ) {
        gotTarget = 1
    }
    else {
        gotOther = 1
    }
}
$1 == "hostname:" {
    host = $2 ORS
}
END {
    prt()
}

function prt(   found) {
    if ( (gotTarget && !gotOther) || !gotConns ) {
        printf "%s", host
    }
    host = gotConns = gotTarget = gotOther = ""
}

$ awk -f tst.awk file
tc-abcdefgh-igjk-lmno-pqrs-abcdefgh
tc-abcdefgh-igjk-lmno-pqrs-ijklmnop
tc-abcdefgh-igjk-lmno-pqrs-qrstuvwx
tc-abcdefgh-igjk-lmno-pqrs-09876543
tc-abcdefgh-igjk-lmno-pqrs-08649753
2
19.10.2021, 11:20

Теги

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