Если вывод 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
Предполагая, что каждая запись о сотруднике начинается со строки 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)
для сброса массива.