我正在使用 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
. 但随后它会从每一行中省略一个换行符。