Isso deve fazer
awk -F'(,|command:)' '{print $1, $NF}' infile
2018-04-25 00:00:10 show databases
Aqui, definimos os separadores de campo com uma vírgula , ou uma string command: e, em seguida, imprimimos o primeiro e o último campo.
Estou tentando analisar um arquivo de log, onde gostaria de obter a primeira coluna e o texto que segue um padrão.
O arquivo de log seria assim,
2018-04-25 00:00:10,139 INFO [HiveServer2-HttpHandler-Pool: Thread-2678420]: parse.ParseDriver (ParseDriver.java:parse(185)) - Parsing command: show databases
Eu gostaria que a saída final contivesse timestamp (primeira e segunda colunas) e todos os comandos seguidos pela palavra-chave command: .
Existe uma maneira limpa de conseguir isso? Atualmente, meu plano é usar awk para buscar as colunas 1 e 2. Use sed para obter os comandos e mesclar as duas saídas para um novo arquivo.
Isso deve fazer
awk -F'(,|command:)' '{print $1, $NF}' infile
2018-04-25 00:00:10 show databases
Aqui, definimos os separadores de campo com uma vírgula , ou uma string command: e, em seguida, imprimimos o primeiro e o último campo.
Você também pode fazer isso com cut :
cut -d' ' -f1,2,12- ${YOUR_LOG_FILE}
Ou (mais seguro):
cat ${YOUR_LOG_FILE} | tr -s " " | cut -d' ' -f1,2,11-
Tags grep text-processing awk sed