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
.