Estou usando Arch Linux/Debian Linux e quero uma lista de "identificadores" únicos em um arquivo ASCII txt. Aqui está um trecho dos dados que quero reduzir:
... (Received from VRW): wind ...
... (Received from 1a00): air_ ...
... (Received from 5710): air_ ...
... (Received from ####): air_ ...
... (Received from 15d8): air_ ...
... (Received from ####): air_ ...
... (Received from 6e9e): baro ...
... (Received from 6e9e): volt ...
... (Received from 6e9e): wind ...
... (Received from 6e9e): air_ ...
Devido ao grande tamanho do arquivo e aos inúmeros "identificadores" duplicados, quero gerar apenas identificadores exclusivos para que a saída fique assim:
... (Received from VRW): wind ...
... (Received from 1a00): air_ ...
... (Received from 5710): air_ ...
... (Received from ####): air_ ...
... (Received from 15d8): air_ ...
... (Received from 6e9e): baro ...
Melhor ainda seria simplesmente a lista de identificadores exclusivos, como 15d8
, 6e9e
, VRW
, etc. Mas suspeito que isso seria muito mais difícil de fazer.
Das sugestões de perguntas semelhantes anteriores que tentei:
grep "(Received from" datafile.txt
e obtive uma lista enorme de identificadores, a maioria dos quais são repetições.
Eu também tentei:
grep "(Received from" datafile.txt | sort -u
mas não consegui dizer se fez alguma diferença
Eu também tentei:
parallel --tag --lb grep "Received from" {} | perl -ne '$seen{$_}++ or print;' ::: Data1.txt
o que provavelmente demonstra meu nível de ignorância nesses assuntos.
Com
awk
(adaptar$4
para a coluna correta):ou com a extensão
match()
da implementação GNU deawk
e um regex :Com implementações de
grep
com suporte para-o
e expressões regulares perl como GNUgrep
quando construído com suporte PCRE(2) esort
:Aquele, ao contrário dos outros, extrairia todos os fósforos da linha.
Em Perl, isso poderia ser feito com:
Onde imprimimos linhas se elas correspondem à expressão regular e o que foi correspondido pelo primeiro par de
()
within ainda não foi visto.Pelo contrário, eu acho. Você extrai apenas identificadores e então é muito fácil criar tal lista:
sort -u
. Processar linhas inteiras e decidir se a linha atual deve ser omitida, dependendo de seu fragmento, parece um pouco mais difícil. Aqui, extraímos identificadores comsed
substituindo linhas inteiras apenas por elas:Notas:
(Received from …):
em uma linha, somente o identificador do primeiro será extraído.)
não são suportados.