Dividir e editar o arquivo resultante no mesmo pipeline [duplicado]

1

Eu tenho um script que está a cada minuto detectando novos arquivos em uma pasta e analisando-os.

Ultimamente tenho problemas com arquivos grandes. O analisador trava se o arquivo é muito grande.

Então, estou dividindo-os se o tamanho for muito grande. Eu estou usando este comando para isso:

split -n l/5 -d filename filename

Eu calculo o número do bloco dividindo o tamanho por um tamanho aceitável para o analisador.

Agora vem a parte complicada. As duas primeiras linhas do arquivo que estou dividindo são muito importantes e eu preciso adicionar essas duas linhas no topo dos arquivos resultantes.

Seria ótimo se eu pudesse fazê-lo na mesma linha de comando de alguma forma analisando os arquivos divididos resultantes ... O tamanho é variável e eu posso ter 20 novos arquivos ou apenas 2, então não posso prever qual é o arquivo original do os arquivos resultantes.

    
por lapinkoira 08.02.2017 / 09:48

2 respostas

0

Você pode usar ed (se as duas primeiras linhas do arquivo não forem um único ponto):

split -n l/5 -d filename split_filename
for i in split_filename* ; do
   (echo 1i && head -n 2 filename && echo -e ".\nw"  ) | ed -s $i
done

# if necessary remove double header from first file:
sed -i "1,2d" split_filenameaa
    
por 08.02.2017 / 10:19
0

Feio, mas deve funcionar:

split -n l/5 -d filename split_filename && find ./ -name 'split_filename*' -exec sh -c "echo 'head -2 filename' | cat - {} > temp && mv temp {}"  \;
    
por 08.02.2017 / 10:13