Найдите длину записи независимо от символов EOL - PullRequest
2 голосов
/ 28 мая 2020

Я использую awk, чтобы найти длину записи.

awk '{print  length($0),$0}'

Работает для Unix окончаний строк <LF>, но рассматривает окончания строк DOS <CR><LF> как символ

Есть ли способ преодолеть это.

1 Ответ

0 голосов
/ 28 мая 2020

Просто используйте разделитель записей в awk в конце строки DOS (\r\n), чтобы они не рассматривались как часть строки. В мире Unix обычно заканчиваются только \n, что является значением RS по умолчанию.

awk -v RS="\r\n" '{ print  length($0), $0 }'

Вы также можете sub() / gsub() функции для замены этих символов в каждой строке и применения ваших действий.

Чтобы обрабатывать оба окончания в стиле Unix / DOS, сделайте Определение RS: регулярное выражение, которое встречается ноль или более вхождений \r

awk -v RS="[\r]*\n" '{ print  length($0), $0 }'

Оба варианта поддерживаются в GNU awk только потому, что версия POSIX не «принимает» многосимвольный разделитель записей.

...