Файл Cat, получить каждую n-ю строку, начиная с номера строки

В зависимости от того, насколько сложны RE, вы можете использовать такой язык, как Python (непроверенный):

#! /usr/bin/env python3
import re, sys
res = ["re1", "re2",... ]  # or read from a file
recs = [re.compile(r) for r in res]
matches = {}
for line in sys.stdin:
    for r in recs:
        if r.match(line):
            matches[r] += 1
for r in matches:
    if matches[r] == 0:
        print(r.pattern)

Конечно, если регулярные выражения содержат строки, которые не могут быть восприняты буквально более продвинутой поддержкой регулярных выражений Python, это не сработает. Вероятно, вы могли бы избавиться от большого количества работы, передав вывод grepэтому (, так как тогда мы удаляем строки, в которых нет совпадений с регулярным выражением ).

0
18.09.2019, 20:40
2 ответа

Используйте переменную (lin), которая содержит номер строки из строки 6. Если linкратно 9, выведите строку с номером строки.

awk '{lin=NR-6; if (!(lin %9)) print}' file1 > file2
0
28.01.2020, 02:22

В GNU sedвы можете использовать операторпервый ~шаг :

sed -n '6~9p' file1 > file2
4
28.01.2020, 02:22

Теги

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