查找独立于 EOL 字符的记录长度

Find record length independent of EOL characters

我正在使用 awk 查找记录的长度。

awk '{print  length([=10=]),[=10=]}'

它适用于 Unix 行结尾 <LF> 但将 DOS 行结尾 <CR><LF> 视为字符

有没有办法解决这个问题。

只需使用 awk 中的记录分隔符到 DOS 行结尾 (\r\n),这样它们就不会被视为行的一部分。在 Unix 世界中,通常以 \n 结尾,这恰好是默认的 RS 值。

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

您还可以 sub()/gsub() 函数来替换每一行中的那些字符并应用您的操作。

要处理两个 Unix/DOS 样式结尾,请将 RS 定义设为正则表达式以出现零次或多次出现 \r

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

GNU awk 仅支持这两种变体,因为 POSIX 版本没有 "accept" 多字符记录分隔符。