Removendo linhas em um arquivo de texto LARGE contendo uma string encontrada em outro arquivo de texto LARGE - FILES SORTED

1

Ainda tendo problemas ao tentar remover linhas em um arquivo LARGE contendo strings listadas em outro arquivo LARGE.

  grep -vwFf file1 file2 - FAILS due to memory exhaustion.

Eu usei:

  comm -23 file1 file2

[ link

Funciona para arquivos classificados e arquivos realmente grandes - mas só funciona para remover linhas duplicadas - não remove linhas que contêm uma string.

Os dois arquivos grandes que eu tenho são classificados de forma que as strings que estou procurando estão no começo de cada linha:

arquivo de texto:

  AAAAA blah blah blah
  AAAAB blas blas blas
  CCCCC sdf sf sdf

arquivo de string

  AAAAA
  CCCCC

Obrigado.

    
por speld_rwong 07.07.2017 / 18:21

1 resposta

1

Por que você não rebenta $file1 em muitos outros menores (em / tmp ou use mktemp), então percorre cada $file1 , usando para o grep ... qual o tamanho ideal do arquivo padrão ( $file1 ) depende do seu sistema.

Aqui, cada $file1 terá 1000 linhas.

i=1 while [ $i -lt $count ] do sed -n "$i,$(($i +1000))p" file1.txt >> /tmp/file${1}.txt i=$(( $i + 1001)) done

Agora você tem um monte de arquivos em / tmp chamados file.txt, então você faz:

for file1 in $(ls /tmp/file*.txt) do grep -vwFf $file1 file2 done

Safer com mktemp:

TEMP_DIR=$(mktemp)

for file1 in $(ls ${TEMP_DIR}/file*.txt) do grep -vwFf $file1 file2 done

    
por 07.07.2017 / 19:03