查找独立于 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" 多字符记录分隔符。
我正在使用 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" 多字符记录分隔符。