2012-03-03 2 views
0

Hello bash начинающий вопрос. Я хочу, чтобы просматривать несколько файлов, найти строки, содержащие слово для поиска, подсчитать количество уникальных строк в этом списке, а затем распечатать в текс файл:печать срок поиска с номером строки

  1. имя входного файла
  2. термин поиска используется
  3. графа уникальных линий

так пример вывода строки для файла с использованием термина поиска «Firstpredictoroutput.txt» «Stop_gained», где есть 10 уникальных строк в файле будет:

Firstpredictoroutput.txt Stop_gained 10 

я могу получить уникальный счетчик для одного файла с помощью:

grep 'Search_term' inputfile.txt | uniq -c | wc -l | >>output.txt 

Но я не знаю достаточно еще о реализации циклов в трубопроводах с использованием Баша. Все мои входные файлы заканчиваются на * predictoroutput.txt

Любая помощь очень ценится.

Спасибо заранее,

Rubal

ответ

0

Вы можете написать функцию с именем fun и вызвать fun с двумя аргументами: filename и pattern

$ fun() { echo "$1 $2 `grep -c $2 $1`"; } 
$ fun input.txt Stop_gained 
input.txt Stop_gained 2 
+0

спасибо, что один работает хорошо. Было бы здорово иметь его в цикле, чтобы избежать необходимости записывать каждый входной файл и поисковый запрос. Но теперь он работает, если я выпишу список всех возможных комбинаций. – user964689

0

Вы можете использовать находку:

find . -type f -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \; 

Хотя у вас может быть проблема со странными именами файлов. Вы можете добавить больше вариантов, чтобы найти, например, для лечения только файлы «.txt»:

find . -type f -name "*.txt" -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \; 
+0

Спасибо за это, он создает выходной файл, но в настоящее время он пуст. Я проверил, что поисковый запрос существует в файлах. Поэтому не уверен, почему это не работает. Любые советы по устранению неполадок? – user964689

+0

Извините, нет трубы между wc и перенаправлением. Починил это. – Pluc

+0

Спасибо, что работает, но выводит только wc -l, а не имя файла и поисковый запрос. – user964689

0
q="search for this" 
for f in *.txt; do echo "$f $q $(grep $q $f | uniq | wc -l)"; done > out.txt 
+0

спасибо за создание петли для этого! – user964689

+0

Отлично. Вы можете принять и поддержать этот ответ, который действительно сработал для вас. – Manish

Смежные вопросы