Tentando executar duas operações em um único arquivo de origem enorme para obter desempenho

1

Estou executando duas operações em um único comando do Linux. As operações são:

  1. Enviando dados do arquivo de origem para um novo arquivo de destino.

  2. Contando o número de registros no arquivo de origem.

Por exemplo: arquivo de origem: a.txt , arquivo de destino: b.txt

cat a.txt > b.txt; cat a.txt | wc -l

No exemplo acima, eu extraio dados de a.txt duas vezes para executar as duas operações. No entanto, meu arquivo de origem é muito grande. Portanto, para um melhor desempenho, estou tentando encontrar uma maneira de extrair dados do arquivo de origem apenas uma vez e executar as duas operações.

Como posso conseguir isso?

    
por Puneeth 12.11.2018 / 14:51

2 respostas

4

tee é o comando que você está procurando:

cat a.txt | tee b.txt | wc -l

Além disso, conforme sugerido nos comentários, se você quiser algo mais curto, evite usar cat inteiramente e redirecionar a.txt diretamente para a stdin de tee :

tee b.txt < a.txt | wc -l

Na página de manual :

tee - read from standard input and write to standard output and files

    
por 12.11.2018 / 14:54
0

Para obter as duas ações em um arquivo, leia o que você pode fazer:

awk '++c;END{print c >"/dev/stderr"}' <a.txt >b.txt 

Entenda que a contagem virá de stderr .

    
por 12.11.2018 / 15:20