Tente
grep -c Andrew * | awk -F: '{if ($2 >=3) print $1}'
Funciona porque grep -c imprime "file: count" para cada arquivo, e -F:
diz ao awk que os dois pontos separam os campos.
Estou tentando exibir todos os arquivos que contêm uma palavra específica em mais de três linhas.
i.e. arquivo:
Andrew is so nice,
and Andrew want some ice,
but Andrew doesn't roll the dice.
Portanto, esse arquivo contém Andrew em mais de três linhas, portanto, ele será exibido.
Eu usei o grep -or '\' mas liste todos os arquivos que contenham "word" em pelo menos uma linha.
Tente
grep -c Andrew * | awk -F: '{if ($2 >=3) print $1}'
Funciona porque grep -c imprime "file: count" para cada arquivo, e -F:
diz ao awk que os dois pontos separam os campos.
O script de shell a seguir pode ser útil:
#!/bin/bash
if [ $# -ne 2 ];then
echo "Usage: 'basename $0' DIRECTORY STRING"
exit 1
fi
for file in $1/* ; do
if [ 'cat $file 2>/dev/null | grep -c $2' -ge 3 ]; then
echo $file
fi
done
O script deve ser executado com dois argumentos:
DIRECTORY
- o diretório em que você deseja procurar arquivos que contenham uma palavra em mais de três linhas
STRING
- a palavra para procurar.
Ou, em um único comando para arquivos do diretório atual e a palavra "Andrew":
for file in *;do if [ 'cat $file 2>/dev/null|grep -c Andrew' -ge 3 ];then echo $file;fi;done
Tags command-line