Как я могу показать результаты подтверждения и количество вхождений

ack foo *

возвращает список строк:

bar.txt
28: this is foo stuff

dump.txt
12: results of foo

gobs.txt
1137: more lines with foo

и

ack -c -l 

возвращается

3

Мой вопрос в том, как я могу показать оба? Мне нужен список строк, как в первом примере, и подсчет количества строк, совпавших со вторым примером.


person Chris    schedule 14.11.2012    source источник
comment
Вы не можете. И в ack 2.0 он явно скажет вам, что вы не можете использовать -c и -l вместе.   -  person Andy Lester    schedule 12.12.2012
comment
Ack 2.12 позволяет мне использовать -c и -l вместе. Он отображает список имен совпадающих файлов и количество совпадений в каждом файле. Насколько я вижу, вы все еще не можете делать то, что пытается сделать OP.   -  person Mr_Chimp    schedule 06.08.2014


Ответы (2)


Ты можешь использовать

ack -hc (-h является сокращением от --no-filename), чтобы получить общее количество.

Согласно документации/справочной странице ack:

-с, --количество

Подавить нормальный вывод; вместо этого напечатайте количество совпадающих строк для каждого входного файла. Если действует -l, будет отображаться только количество строк для каждого файла, в котором есть совпадающие строки. Без -l некоторые счетчики строк могут быть равны нулю.

В сочетании с -h (--no-filename) ack выводит только один общий счет.

Вот что сработало для меня (расширяя ответ @Jordan) -

ack 'pattern' && ack -hc 'pattern'

или, лучше (ИМО):

ack 'pattern'; ack -hc 'pattern'

Насколько я понимаю, используя &&, вторая команда зависит от возврата первой к запуску; использование вместо этого ; просто запустит их обоих, один за другим, независимо. В данном случае я думаю, что ; больше подходит.

person Aaron Wallentine    schedule 15.07.2016
comment
Отличный ответ, давно искал. - person eregon; 25.03.2017

Невозможно заставить ack выводить обе вещи, которые вы хотите, в одной команде. Самый простой способ получить то, что вы хотите, — это связать обе команды вместе с &&.

person Jordan Lewis    schedule 14.11.2012