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

Я испытываю затруднения управлять большим текстовым файлом,

Мой демонстрационный f1.txt имеет несколько 3000 плюс строки, с ниже формата

Я должен соответствовать строке, и затем соответствовать строкам после той строки с другой строкой (здесь в этом случае "необходимый") и распечатать те согласующие отрезки длинной линии наряду с исходной строкой.

Это должно продолжиться, пока все строки не закончены.

Требование в качестве примера ниже, можно ли помочь?

====== f1.txt ====

String      :  a

--
==

==


needed line ------------ 100

needed line -------------200


-





String      :  b


--
==

==


needed line ------------ 500

needed line -------------600

needed line ------------ 700

needed line -------------800

-


String      :  c

--

==


needed line ------------ 900



===
===

ВЫВОД НЕОБХОДИМ

a needed line ------------ 100

a needed line -------------200

b needed line ------------ 500

b needed line -------------600

b needed line ------------ 700

b needed line -------------800

c needed line -------------900

0
задан 30 August 2014 в 18:02

2 ответа

В awk,

awk -F" : " '/^String/ {string = $2}; /^needed/ {print string, $0}' f1.txt

Можно сделать подобную вещь в sed, хотя это не совсем столь же компактно - в основном это использует пространство хранения sed как эквивалент string переменная. К сожалению, AFAIK там не является никаким простым способом предварительно ожидать пространство хранения к пространству шаблона в sed, таким образом, мы должны добавить и затем подкачать порядок после:

sed -rn -e '/^String : / {s///;h;}' -e '/^needed/ {G;s/(.*)\n(.*)/\2 \1/;p;}'  f1.txt

Примечание: полное решение должно, вероятно, проверить это a String был найден и присвоен прежде, чем попытаться распечатать его (в случае, если файл содержит needed строки перед любым String).

2
ответ дан 6 October 2019 в 18:34

Вот сценарий в качестве примера, который делает это: http://paste.ubuntu.com/8186522/

я сделал несколько предположений:

  1. Ваше присвоение собирается использовать : в качестве разделителя. Я использовал в своих интересах это в установке IFS для read.
  2. Вы не возражаете пробегаться через файл многократно. Это может быть сделано в одной передаче, на самом деле могло бы быть легче тот путь, в зависимости от реализации.
0
ответ дан 7 October 2019 в 04:34

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

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