awk
не идентифицирует ^M
буквально, он идентифицирует его как шаблон CRLF \r\n
, поэтому ваш sub()
может использовать представление символа CR напрямую, как показано ниже. Также вам не нужно проверять, содержит ли поле символ, и делать замену. Функции замены просто ничего не делают, если указанный шаблон не найден. Итак, все, что вам нужно, это заменить CR только в последнем столбце.
awk '{ sub("\r", "", $NF); print $NF }'
Если необходимо заменить несколько столбцов, переключите $NF
на нужный столбец.
Если вы делаете это в цикле для всех столбцов до конца файла, просто выполните
awk '{ for(i=6; i<=NF ; i++) { sub("\r", "", $i); printf "%s ", $i; } }'
Также файл может иметь только крайние NF
столбцы, а $NF
является последним значением столбца. Измените цикл так, чтобы он выполнялся до NF
, чтобы получить доступ к последнему значению столбца.
Чтобы провести различие между двумя случаями,используйте предикат -path
:
$ find. -path./a -prune -o -type f -print