Dividir arquivos com base em correspondências grep

1

Alguém pode me guiar como posso dividir um arquivo em dois arquivos com um arquivo contendo as linhas que correspondem ao padrão, enquanto o outro contendo as linhas que não correspondem ao padrão? Eu quero especificar os padrões para combinar em outro arquivo. As linhas são mutuamente exclusivas, ou seja, a linha pertencente a uma categoria não pode pertencer à outra. Eu posso fazer dois grep s separadamente, mas quero iterar o arquivo apenas uma vez.

O que eu tenho feito agora é:

grep -F -f regexp_file input_file>./positive_match
grep -F -f -v regexp_file input_file>./negative_match
    
por MARK 15.02.2017 / 03:38

1 resposta

2

O problema é parte de entrada, (para ler o arquivo de entrada do disco apenas uma vez) e processamento da peça (para percorrer o arquivo apenas uma vez).

Como grep só pode produzir em um fluxo, a parte de iteração do trabalho não pode ser feita com apenas uma instância de grep .

A parte de entrada do trabalho pode ser melhorada:

tee >(grep -F -f regexp_file    >./positive_match) < input_file | \
      grep -F -f regexp_file -v >./negative_match

Usando tee e bash 's Substituto de Processo , o input_file só precisa ser lido do disco uma vez. O pee command pode fazer o mesmo:

pee 'grep -F -f regexp_file    >./positive_match' \
    'grep -F -f regexp_file -v >./negative_match' < input_file
    
por 15.02.2017 / 07:42

Tags