У меня есть некоторый awk-код, который работает очень медленно. Формат моего файла - 5 колонок ASCII с разделителями табуляции. Я работаю со столбцом 5, чтобы получить количество соответствующих символов для изменения значения в столбце 4.
Пример строки ввода:
10 5134832 N 28 Aaaaa * AAAAaAAAaAAAAaAAAA ^] a ^] a ^ Fa ^] a
Если я найду «^» в $ 5, я не хочу считать его или следующий символ.
Затем я хочу узнать, сколько символов ">" или "<" или "*" и удалить их из подсчета. Я предполагаю, что использование gsub и 3-х разбиений - это далеко не идеально, тем более что столбец 5 может иногда быть очень очень длинной строкой. </p>
awk '{l=$4; if($5~/>/ || $5~/</ || $5~/*/ ) {gsub(/\^./,"");l-=split($5,a,"<")-1;l-=split($5,a,">")-1;l-=split($5,a,"*")-1}
Если код успешно выполняется в строке выше, l будет 27.
Я опускаю окружающие части команды, чтобы попытаться сосредоточиться на части, о которой у меня есть вопрос.
Итак, что является лучшим шагом для ускорения работы?