Como apagar certas linhas de 10000 arquivos eficientemente

0

Eu tenho 10000 arquivos em um diretório. Eu gostaria de apagar as linhas para que eu mantenha 2 linhas no cabeçalho, 2 linhas na cauda e cada 100 linhas no meio.

Por exemplo:

#header1
#header2
0     x y
1     x y
...
100   x y
101   x y
...
80000 x y
#tail1
#tail2

deve se tornar

#header1
#header2
0     x y
100   x y
200   x y
...
80000 x y
#tail1
#tail2

Qual é a maneira mais eficiente e fácil de fazer isso? Eu tenho cerca de 20 diretórios com 10000 esses arquivos de comprimento variável que eu tenho que truncar.

    
por sodiumnitrate 05.05.2016 / 16:39

1 resposta

0

Como comentado, o awk é uma boa escolha para isso. Se for uma tarefa única, eu não me incomodaria mais do que criar um script baseado no awk que grava o arquivo reduzido do arquivo completo retirado de seu parâmetro e chamá-lo de um comando find ... -exec .... Como

cat $HOME/bin/shrinkit.sh
#!/bin/sh

awk '/^#/ && headcnt<2  {print; ++headcnt}; $1~/^[0-9]+$/ { if(!(cnt%100)) {print}; ++cnt}; cnt && /^#/ && tailcnt<2  {print; ++tailcnt}' "$1" >"$1.tmp"  && mv "$1.tmp" "$1"


cd $workdir
find . -type f -exec $HOME/bin/shrinkit.sh {} \;
    
por 05.05.2016 / 19:19