Добавьте номера строки, если определенный шаблон соответствовал

У меня есть файл, к которому я хотел бы добавить номера строки выборочно. Скажите, что целевая строка начинается с INIT "команда", где команда является переменной текстовой строкой. Я хочу, чтобы это было INIT "linenumber команда". Идея состоит в том, что каждая строка INIT отмечена с заказанным уникальным идентификатором, но не обязательно непрерывная. Тот уникальный идентификатор мог быть своим номером строки. Премии (фактически, конечно!), если число могло бы быть в шестнадцатеричном числе.

Править:

Демонстрационный вход

#: ../src/app-utils/business-prefs.scm:24
msgid "Counters"
msgstr ""

Демонстрационный вывод

#: ../src/app-utils/business-prefs.scm:24
msgid "123f>Counters"
msgstr "123f>شمارنده‌ها"

Файл заполнен тысячами этих пар сообщения. msgid и соответствие тегов msgstr таким образом должны иметь тот же код. С кодом ниже я выполнил бы его дважды и изменил бы внутренний параметр. Я думаю, что должен изменить некоторые числа в коде для адаптации его к образцу. Я добавил">" только, чтобы помочь распознать код от фактической строки т.е. некоторого украшения.

0
задан 1 April 2017 в 13:02

1 ответ

Не уверенный, если это точно, что Вы хотите (Вы еще не обеспечили requestd примеры), но вот попытка решить его с маленьким сценарием Python. Это считывает данные со стандартного входа и печатает их t стандартный вывод, вставляя индекс в шестнадцатеричную нотацию в каждой строке, которая запускается с "INIT ":

#! /usr/bin/env python3
import sys

i = 0 if len(sys.argv) == 1 else int(sys.argv[1])
while True:
    line = sys.stdin.readline()
    if not line:
        break
    if line.startswith("INIT "):
        print(line[:5] + hex(i)[2:] + line[4:], end="")
        i += 1
    else:
        print(line, end="")

Я сохранил сценарий выше как numberinit.py и сделанный этим исполняемое использование chmod +x numberinit.py.

Вы, как предполагается, выполняете его одним из этих двух способов:

./numberinit.py < INPUTFILE
./numberinit.py STARTINDEX < INPUTFILE

INPUTFILE файл, который Вы хотите считать и дополнительное STARTINDEX параметр позволяет Вам указать, что первый индекс, который будет использовать, принимать значение по умолчанию, 0.

Пример использования:

$ cat example.txt 
my input file
INIT first
INIT second
stuff in between
INIT third
INIT something longer as fourth

$ ./numberinit.py < example.txt 
my input file
INIT 0 first
INIT 1 second
stuff in between
INIT 2 third
INIT 3 something longer as fourth

$ ./numberinit.py 42 < example.txt 
my input file
INIT 2a first
INIT 2b second
stuff in between
INIT 2c third
INIT 2d something longer as fourth

Вы можете, конечно, перенаправить вывод команды для сохранения его в другом файле, но не используете тот же входной и выходной файл (усечет файл из-за того, как оболочка обрабатывает перенаправления):

./numberinit.py < input.txt > output.txt
1
ответ дан 7 November 2019 в 06:58

Другие вопросы по тегам:

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