#! /usr/bin/awk -f
BEGIN {
OFS="\t";
print "Number","Name","Value";
print "*************************************";
number="" ; name="" ; value="";
};
/^%%LST/ {
if (number != "" && name != "" && value != "") {
print number, name, value;
name=""; value="";
} ;
number=gensub(/%%LST:=?"([0-9]+)";%%/,"\1","g")
} ;
$3 == 350 {
name=$1;
value=$4
};
END {
if (name != "") {
print number, name, value
}
}
Salve como, por exemplo, remy.awk
, torne-o executável com chmod +x remy.awk
e forneça dados sobre stdin ou um nome de arquivo (por exemplo, ./remy.awk remy.txt
)
A seção BEGIN {}
configura o OFS (Output Field Separator) como uma guia, depois imprime os cabeçalhos de saída e inicializa as variáveis number
, name
e value
.
Em seguida, ele extrai o número (em uma variável chamada number
) das linhas que começam com '%% LST', mas primeiro verifica se number
não estava vazio - se já tiver um valor, ele imprime detalhes do registro anterior e limpa as variáveis name
e value
.
Nas linhas em que a chave (campo 3) é igual a 350, ela extrai o name
e value
da linha.
Finalmente, o bloco END {}
imprime as variáveis se name
não estiver vazia, para que funcione corretamente se o registro final (delimitado por %% linhas LST) for um com Key == 350. Sem isso, não seria possível imprimir os dados do registro final.
A saída, dados seus dados de amostra acima, é:
$ ./remy.awk remy.txt
Number Name Value
*************************************
889900 Staff 256000
990088 Staff 1048576