首页 > 解决方案 > 如何在 AWK 中处理不同的行尾,例如以 CRLF (\r\n) 结尾的行和以 LF (\n) 或 CR (\r) 结尾的行

问题描述

我是 AWK 的新手,要求拆分其中一个字段并将其附加到记录/行的末尾,为此我使用了我在下面分享的 awk 命令。但是,当文件具有不同的行尾(例如 CR 或 CRLF)时,它的行为会有所不同。

awk 命令:

awk 'BEGIN { FS = "~" }; {fullname=$1}; {split(fullname, a, " ")}; { if (fullname=="TT") newmodifiedline=$0; else newmodifiedline=$0"~"a[1]"~"a[2]; }; { print newmodifiedline }' example.txt > example_modified.txt

当 example.txt 文件以 CRLF 作为行尾时,如下所示 在此处输入图像描述

结果将是附加字段移动到下一行的位置。这不是预期的。 在此处输入图像描述

但是,当使用行尾为 LF 的文件时,我确实得到了所需的结果,并且附加的值正确地附加在记录的末尾,如下所示。 在此处输入图像描述

有没有一种方法可以处理它而不考虑行尾字符或将行尾字符设置为 LR 然后运行 ​​awk 命令?请帮忙。

标签: linuxawk

解决方案


awk '
{ sub(/\r$/,"") }
...other stuff...
' file

可能是您想要的,否则请参阅为什么我的工具输出会覆盖自身以及如何修复它?


推荐阅读