我有一个简单的awk命令,可以将日期从MM/DD/YYYY转换为YYYY/MM/DD.但是,我正在使用的文件在行的末尾有\ r \n,有时日期在行的末尾.
awk '
BEGIN { FS = OFS = "|" }
{
split($27, date, /\//)
$27 = date[3] "/" date[1] "/" date[2]
print $0
}
' file.txt
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果日期是,MM/DD/YYYY\r\n那么我在输出中结束这个:
YYYY
/MM/DD
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?请记住,有时输入只是\r\n在这种情况下输出应该是,//但最终结果为
/
/
Run Code Online (Sandbox Code Playgroud)
鉴于\r并非总是在字段的末尾$27,最简单的方法是\r从整行中删除.
使用GNU Awk或Mawk(其中一个通常是awkLinux平台上的默认设置),您可以简单地定义输入记录分隔符RS,相应地:
awk -v RS='\r\n' ...
Run Code Online (Sandbox Code Playgroud)
或者,如果您还想要\r\n终止输出行,请将输出记录分隔符设置ORS为相同的值:
awk 'BEGIN { RS=ORS="\r\n"; ...
Run Code Online (Sandbox Code Playgroud)
可选阅读:对于BSD/macOS Awk用户:
BSD/macOS awk不支持多字符 RS值(符合POSIX Awk规范:"如果RS包含多个字符,则结果未指定").
因此,sub需要在Awk脚本内调用以\r从每个输入行的末尾修剪实例:
awk '{ sub("\r$", ""); ...
Run Code Online (Sandbox Code Playgroud)
要输出 \r\n -terminated行,选项-v ORS='\r\n'(或ORS="\r\n"脚本BEGIN块内)将正常工作,如GNU Awk和Mawk.
| 归档时间: |
|
| 查看次数: |
2279 次 |
| 最近记录: |