Получить контекст вокруг номера строки в Bash из сжатого файла - PullRequest
1 голос
/ 06 марта 2020

Я знаю, что можно искать номер строки (скажем, строка # 139656504) и возвращать контекст вокруг него:

grep -n 139656504 -B 5 -A 5 file.txt

Но когда я использовал это для сжатого файла, он ничего не возвращал :

zgrep -n 139656504 -B 5 -A 5 file.txt.gz

Я нахожусь на macOS Мохаве.

Есть ли способ получить контекст вокруг этой строки с помощью сжатых файлов?

Я сделал тестовый файл (test.txt), который содержит:

test1
test2
test3
test4
test5
test6
test7
test8
test9
testBB
test11
test12
test13
test14
test15
test16
test17
test17
test18
test19
test20

Сжатие файла:

pigz test.txt

Теперь, если я запущу:

zgrep -n 10 -C 5 test.txt.gz

Это мне ничего не дает ... (Я убедился, что в строке 10 не будет номера 10, иначе zgrep "ищет" 10, а не строку # 10)

Если строка 10 была бы test10, а не testBB, она бы работала. Но это не то, что я ожидаю.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Если вы хотите напечатать содержимое указанного c номера строки, вы можете использовать awk:

awk -v nr=10 'FNR==nr' file

или с префиксом номера строки

awk -v nr=10 'FNR==nr{ print FNR":"$0 }' file

или с 5 контекстными строками

awk -v nr=10 'FNR>=nr-5 && FNR<=nr+5{ print FNR":"$0 }' file

или

zcat file.gz | awk ...

для сжатых файлов.

1 голос
/ 06 марта 2020

попробуйте это:

zgrep -n 139656504 -C 5 file.txt.gz

Примечания: -n означает отображение номеров строк в выходных данных

-C 5 означает отображение 5 строк до и 5 строк после каждой строки, которая удовлетворяет expression.

139656504 - это шаблон, который вы ищете.

Do man grep или man zgrep - похоже, что все ключи командной строки работают либо для.

Если все, что вам нужно, это увидеть окружающие строки указанной строки c, вы можете сделать что-то вроде этого:

gunzip -c file.txt.gz | sed -n "139656499,139656509p"

Это значит - заархивировать файл в стандартный вывод, чтобы вы могли передать его, передайте его в sed, который является удивительной утилитой, и здесь было сказано, что sed отображает строку № 5 до и 5 после 139656504.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...