Показать файлы, которые содержат слово более чем в трех строках?

Я пытаюсь отобразить все файлы, которые содержат определенное слово более чем в трех строках.

то есть. file:

Andrew is so nice, 
and Andrew want some ice,
but Andrew doesn't roll the dice.

Таким образом, этот файл содержит Эндрю в более чем трех строках, поэтому он будет отображаться.

Я использовал grep -or '\', но в нем перечислены все файлы, которые содержат слово "как минимум" в одной строке.

2
задан 22 August 2013 в 19:07

2 ответа

Try

  grep -c Andrew * | awk -F: '{if ($2 >=3) print $1}'

Это работает, потому что grep -c печатает «file: count» для каждого файла, а -F: сообщает awk, что двоеточие разделяет поля.

0
ответ дан 22 August 2013 в 19:07

Следующий сценарий оболочки может быть полезным:

#!/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
2
ответ дан 22 August 2013 в 19:07

Другие вопросы по тегам:

Похожие вопросы: