find | parallel 'perl -lane '\'' print "$ARGV: $_" if $. == 1 and /searchStr/i '\'' {}' Outra ideia para tentar acelerar as coisas é colocar cores e threads disponíveis para funcionar: é isso que GNU é paralelo é para. Este exemplo exibe perl , mas faz o mesmo que awk em 3. acima. Aqui está uma lista de comandos:
find procura arquivos no diretório atual e em seus subdiretórios. Você pode especificar um diretório diferente para procurar e um padrão ou extensão de arquivo para filtrar: find /cygdrive/c/Directory/To/Search -iname "*.txt" .
| "pipe", isto é, alimente a lista de resultados para o próximo comando.
parallel executa o próximo comando em paralelo.
perl linguagem de script que se destaca na manipulação de arquivos de texto, pode substituir sed ou awk .
-lane conjunto útil de switches para perl one-liners.
'\'' de apóstrofo com escape, necessário, pois já abrimos um apóstrofo definido após parallel .
print "$ARGV: $_" imprime o nome do arquivo ( $ARGV ), dois pontos, um espaço e a linha completa ( $_ ).
if somente executa a instrução anterior se as seguintes condições forem atendidas.
$. == 1 número da linha ( $. ) é igual a um ( 1 ), ou seja, estamos vendo a primeira linha do arquivo.
and a seguinte condição também deve ser atendida.
/searchStr/i a linha que está sendo examinada contém o texto searchStr , sem distinção entre maiúsculas e minúsculas.
'\'' outro apóstrofo com escape marca o fim da instrução perl .
{} isto será substituído por parallel com cada um dos nomes de arquivos passados por find .
' end da instrução parallel .