O seguinte script awk
passará pelos campos (colunas) de cada linha e procurará os campos /config:
e /service:
. Quando encontrado, o conteúdo completo desses campos é armazenado em variáveis.
Depois que os campos forem processados, o script gerará os dados no segundo campo junto com os campos encontrados do loop. O processo continua com a próxima linha de entrada.
{
config = service = "";
for (i = 3; i <= NF; ++i) {
if ($i ~ "^/config:") {
config = $i;
} else if ($i ~ "^/service:") {
service = $i;
}
}
print $2, config, service;
}
Este script foi testado e funciona com gawk
(% GNUawk
), mawk
( awk
de Mike) e nawk
(% BSDawk
).
Executando isso nos dados que você forneceu:
$ awk -f script.awk data
345 /config:launcher.mxres /service:session
4986 /config:launcher5.mxres /service:engine
912 /config:launcher_binary.mxres /service:scanner
Se você quiser uma saída delimitada por tabulação, adicione BEGIN { OFS = "\t" }
na parte superior do script.
... ou você poderia passar a saída do script original através de column -t
(irá inserir vários espaços se necessário para alinhar colunas):
$ awk -f script.awk data | column -t
345 /config:launcher.mxres /service:session
4986 /config:launcher5.mxres /service:engine
912 /config:launcher_binary.mxres /service:scanner
Como um verso:
$ awk '{ config = service = ""; for (i = 1; i <= NF; ++i) { if ($i ~ "^/config:") { config = $i } else if ($i ~ "^/service:") { service = $i } } print $2, config, service }' data | column -t