filtra campos em um arquivo, sem formato de registro constante

0

Eu tenho 3 arquivos com milhões de registros cada. Gostaria de filtrar esses arquivos para encontrar alguns dados com mais facilidade. Infelizmente, não há formato comum de um registro para outro. Por exemplo:

record1 will contain: A B C D E
record2 will contain A B D E
record3 will contain B C D

A única parte comum que tenho são os primeiros 23 caracteres que contêm algum identificador (dos quais apenas os últimos 15 são únicos entre os registros).

Gostaria de filtrar esses arquivos para conter o identificador e a parte D. Como eu posso fazer isso? Eu sei que o delimitador entre os campos é tab e dentro de cada parte, há vírgula.

Exemplo da parte D:

ROAMENT,INT,15
ROAMENT - constant part which identifies the field
INT - some value which is a must if ROAMENT exists
15 - some other value which is optional
    
por user1977050 24.09.2014 / 20:26

1 resposta

2

perl -ane 'if (/\t(ROAMENT[^\t\n]*)/) { print $F[0], $1, "\n"; }' inputfile

Explicação:

  • -a invoca o autosplit, dividindo campos de entrada no array @F. Qualquer espaço em branco dividirá os campos, se você quiser apenas guias, poderá adicionar -F"\t"
  • -n invoca um loop automático sobre seus dados de entrada, não imprimindo a linha de entrada no final
  • -e define uma expressão para executar em cada loop
  • A expressão verifica por < tab > ROAMENT e, em seguida, qualquer caractere até uma guia ou nova linha; se encontrado, imprime o primeiro campo da matriz autosplit e o campo encontrado.
por 25.09.2014 / 15:57