Как я могу отформатировать мой вывод grep, чтобы показать номера строк в конце строки, а также счетчик посещений?


378

Я использую grep для сопоставления строки в файле. Вот пример файла:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt возвращается

example two null,
example four null,

Как я могу вернуть совпавшие строки вместе с их номерами строк следующим образом:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Я знаю, что -c возвращает общее количество совпавших строк, но я не знаю, как правильно отформатировать его, чтобы добавить total null countспереди, и я не знаю, как добавить номера строк.

Что я могу сделать?

Ответы:


600

-n возвращает номер строки.

-iдля случая игнорирования. Используется только в том случае, если нет необходимости в сопоставлении регистра

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Объедините с, awkчтобы распечатать номер строки после матча:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Используйте подстановку команд, чтобы распечатать общее количество пустых значений:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

Могу ли я отформатировать это, добавив номера строк после, а не до с помощью:?
Лондон,

ваше решение кажется хорошим, но вы получите ошибкуawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
Лондон,

извините, перешел на Linux, теперь он работает :) это была версия Windows не так хорошо
Лондон

1
... рыцари, которые говорят, -niвот как вы помните этот трюк
Сантьяго Аристи

59

Используйте -nили --line-number.

Проверьте man grepдля намного больше вариантов.


3
Новый пользователь linux ленится читать man-страницу. Но если они будут использовать Linux достаточно, они привыкнут к нему :) Это супер полезно :)
Dzung Nguyen

19
Не всегда ленив, (но иногда), часто случается так, что у нового пользователя Linux возникают проблемы с пониманием справочной страницы. (Они могут показаться загадочными)
TecBrat

иногда страница man может занимать много страниц. И это все сложно прочитать
Евгений Коньков

7

используйте grep -n -i null myfile.txtдля вывода номера строки перед каждым совпадением.

Я не думаю, что у grep есть переключатель для вывода количества совпадений, но вы можете просто передать вывод grep в wc, чтобы сделать это:

grep -n -i null myfile.txt | wc -l

3
-c напечатает все
совпадения

Вы правы. К сожалению, это также подавляет нормальную производительность.
Дженнингер

7

Или используйте awkвместо:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

4

grepнайти строки и вывести номера строк, но не позволяет вам «программировать» другие вещи. Если вы хотите включить произвольный текст и заняться другим «программированием», вы можете использовать awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Или только используя оболочку (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

или в perl (для полноты ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'


1

Просто думал, что смогу чем-то помочь тебе в будущем. Чтобы найти несколько строк и номеров выходных строк и просмотреть выходные данные, введите:

egrep -ne 'null|three'

покажет:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

будет отображать вывод в менее сессии

HTH Jun

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.