Моя ошибка
Уточнение (возможно, для кого-то очевидное), что GYPA
не должен быть жестко закодирован в сценарии, а должен быть получен из первой строки, начинающейся с #
пришел в комментарии; Я не видел его, поэтому мой ответ в следующем неверен.
Фактический (неправильный) ответ
Почему бы не sed
?
< file.txt sed -n '/^#/!{s/^[^ ]* *[^ ]* */GYPA:/;s/;/;GYPA:/g;p}'
Ну, написано так, что это немного нечитаемо, так что, может быть, переписать, как это лучше:
< file.txt sed -n ' # -n inhibits the automatic printing
/^#/!{ # only for lines starting with #
s/^[^ ]* *[^ ]* */GYPA:/ # change the first two columns, space included to GYPA:
s/;/;GYPA:/g # add a GYPA: after each semicolon
p # print the resulting line
}'
На самом деле я, возможно, слишком сильно зависим от опции -n
, и я должен вылечить себя , так как неиспользование этого (или любого другого параметра) позволяет поместить все в скрипт, который автоматически интерпретируется оболочкой как sed
скрипт:
#!/usr/bin/sed -f
/^#/d
s/^[^ ]* *[^ ]* */GYPA:/
s/;/;GYPA:/g
, который вы можете использовать так:
< file.txt ./thefileabove