Я пытаюсь отобразить все файлы, которые содержат определенное слово более чем в трех строках.
то есть. file:
Andrew is so nice,
and Andrew want some ice,
but Andrew doesn't roll the dice.
Таким образом, этот файл содержит Эндрю в более чем трех строках, поэтому он будет отображаться.
Я использовал grep -or '\', но в нем перечислены все файлы, которые содержат слово "как минимум" в одной строке.
Try
grep -c Andrew * | awk -F: '{if ($2 >=3) print $1}'
Это работает, потому что grep -c печатает «file: count» для каждого файла, а -F:
сообщает awk, что двоеточие разделяет поля.
Следующий сценарий оболочки может быть полезным:
#!/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
Скрипт должен быть запущен с двумя аргументами:
DIRECTORY
- каталог, где Вы хотите искать файлы, который содержит слово на более затем трех строках
STRING
- слово для поиска.
Или, в единственной команде для файлов из текущего каталога и слова "Andrew":
for file in *;do if [ `cat $file 2>/dev/null|grep -c Andrew` -ge 3 ];then echo $file;fi;done