Я могу подвести тебя немного ближе.В вашем скрипте awk я обнаружил пару ошибок, которые нужно исправить, прежде чем делать больше.Во-первых, оператор BEGIN выглядит ошибочно.Вместо того, чтобы печатать substr ($ 1,2), он должен просто установить IFS и OFS.Как вы, наверное, уже знаете, BEGIN исполняется только один раз.
Кроме того, как только IFS настроен на канал '|', вам нужно будет изменить третье поле в каждой строке ввода.Таким образом, целевой параметр для всех ваших вызовов gsub должен быть $ 3, а не $ 1.
Ну, это все, что я получил для тебя.Я подозреваю, что остальная часть проблем, с которыми я сталкиваюсь, когда ваш вывод не соответствует ожидаемым результатам, связана с той причиной, о которой вы упомянули, - с другой обработкой регулярных выражений.
awk '
BEGIN {FS=OFS="|"}
{
gsub("\b[^0-9]","",$3);
gsub("[a-z]","",$3);
gsub("\b[^0-9]","",$3);
gsub("^06","+336",$3);
gsub("^07","+337",$3);
gsub("^+3306","+336",$3);
gsub("^+3307","+337",$3)
}
1
' sample