Прочитайте файл и найдите первое вхождение определенной строки и совпадение только с определенными шаблонами

Если вывод myScript.shпредставляет собой одну или несколько строк, и вы хотите вставить их как новые строки между строками 3 и 4 исходного файла:

$ sh./myScript.sh | perl -i -pe 'print <STDIN> if $.==4' myFile.txt

В приведенном выше примере измените <STDIN>на <STDIN>,"\n", если вывод myScript.shне заканчивается новой строкой.

Если вывод myScript.shпредставляет собой одну строку, и вы хотите добавить ее в конец третьей строки, не вставляя новую строку:

$ sh./myScript.sh | perl -i -ple 'chomp($_.=<STDIN>) if $.==3' myFile.txt
0
11.05.2020, 12:39
1 ответ

Предполагая, что каждая запись о сотруднике начинается со строки empid, мы можем просто изменить ответ на предыдущий вопрос, полностью проигнорировав (, т.е. не печатать и не принимать за «начало -строки». -запись" тег )"деформированные" empidстроки:

awk -F';' '$1=="empid"{if ($2!~/^A/) next; delete a}  !a[$1]++' input.txt > output.txt

При этом будут игнорироваться все строки, в которых поле «значение» строк empidне , а не начинается с Aпутем выдачи команды next, если такая строка была найдена.

Кроме того, мы снова используем массив для хранения того, как часто данное имя атрибута уже встречалось в текущей записи, и пропускаем любые атрибуты, которые уже встречались в этой записи. Обнаружение строки empidприведет к сбросу массива для новой записи (, если она содержит «действительный» идентификатор в соответствии с вашим определением ).

Опять же, в версиях awk, которые не реализуют оператор delete aдля всей переменной массива , эту команду необходимо заменить на

split("",a)

для сброса массива.

0
28.04.2021, 23:15

Теги

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