我正在使用awk处理一些程序文件,删除调试部分。其中有一些文件没有尾随的换行符。我希望awk逐行打印文件,并在每行末尾添加换行符,但是如果末尾没有额外的换行符,则不需要添加一个额外的换行符。
例如:
我不想添加换行符的原因是我正在尝试使用
因此,总结一下,我该如何让awk逐行处理文件,但如果不存在换行符,则不添加换行符?
我的当前代码如下:
例如:
a
b // no newline after the "b"
被转换成了这样:
a
b<NEWLINE>
我不想添加换行符的原因是我正在尝试使用
cmp --silent $file $file_without_debug_sections
来确定是使用原始文件还是新文件。而我关心的原因是我想限制编译器输出中具有调试扩展名的文件数量。仅在它们有所不同的情况下使用非调试版本还清楚地表明了哪些文件是通过"删除调试部分"过程更改的。因此,总结一下,我该如何让awk逐行处理文件,但如果不存在换行符,则不添加换行符?
我的当前代码如下:
{
if ($0 ~ /^[ \t]*\/\/[ \t]*\/\*[ \t]*begin[ \t]+debug[ \t]*$/) {
print "/* begin debug";
} else if ($0 ~ /^[ \t]*\/\/[ \t]*end[\ t]+debug[\t ]*\*\/[ \t]*$/) {
print "end debug */";
} else print;
}
我尝试将末尾的print
替换为printf "%s", $0
。但这样会从每一行中省略一个换行符。
RT
来输出与输入中找到的相同终止符或缺乏任何终止符。https://www.gnu.org/software/gawk/manual/html_node/gawk-split-records.html - dave_thompson_085print
。(如果不清楚,请原谅。)上面是我尝试解决换行问题时展示的工作方式。使用print
导致在原始内容中不存在换行符的情况下添加换行符的问题。【编辑】帖子,使其更清晰易懂。 - Chris Middletonprint
,但在执行cmp
命令之前删除换行符(如果存在的话)。简单比较文件时不考虑末尾可能有的换行符。 - hek2mgl