@SatoKatsura já respondeu sua primeira pergunta em um comentário: awk -v cutoff=299851915672 'FNR == 1 || $1+0 > cutoff+0' inputFile
É muito difícil interpretar o que você está fazendo em sua segunda pergunta (você pode atualizar sua pergunta com um algoritmo ou pseudo-código?), mas parece que você está querendo executar muitas instâncias (50?) de seu processo de uma só vez (um por núcleo da CPU no sistema). Em caso afirmativo, você começou corretamente dividindo o arquivo em 50 arquivos menores.
A peça que falta no quebra-cabeça é que você precisa usar o GNU parallel
(ou, alternativamente, xargs
com a opção -P
) para executar os processos em paralelo. Por exemplo:
find . -type f -name 'inputFile-*' -print0 |
parallel -n 1 \
awk -v cutoff=299851915672 \
\'FNR == 1 \|\| \+0 > cutoff+0 {print \> FILENAME".out"}\'
(Veja as notas 1, 2 e 3 abaixo)
Por padrão,
parallel
executará um processo por núcleo no sistema. Você pode substituir isso usando a opção -j
para especificar o número de trabalhos simultâneos.
O script awk
salva a saída de cada arquivo de entrada de um arquivo com o mesmo nome e uma extensão extra .out
- por exemplo, inputFile-1
- > %código%. Para juntá-los todos juntos novamente em um arquivo grande, você pode usar inputFile-1.out
:
cat inputFile*.out > complete.output.txt
rm -f *.out
NOTA 1: você precisa escapar de aspas e outros caracteres especiais (por exemplo, cat
, |
, $
, >
, &
e mais) com uma barra invertida na linha de comando a ser executada por% código%. É mais fácil salvar o script ;
em um arquivo autônomo (com parallel
como primeira linha), torná-lo executável com awk
e executar esse script em paralelo.
NOTE2: isso provavelmente não fará exatamente o que você quer porque eu não tenho ideia do que você está realmente pedindo. É um exemplo geral de como processar vários arquivos em paralelo. O script #!/usr/bin/awk -f
quase certamente terá que ser alterado para atender aos seus requisitos (incompreensíveis).
NOTA 3: Você pode achar que a economia de tempo em potencial de executar vários processos em paralelo é mais do que compensada pelo tempo necessário para dividir a entrada em vários arquivos e pela sobrecarga de iniciar uma nova instância de seu processo (por exemplo,% scriptchmod
) para cada arquivo. Isso depende da natureza e tamanho dos arquivos e da natureza do processamento a ser executado em cada arquivo. Correr em paralelo nem sempre significa obter resultados mais rápidos. Ou você pode ter complicado demais o que está fazendo para que seja difícil de entender e / ou replicar com outros dados.