gpt4 book ai didi

awk - 使用 awk 打印文件而不添加尾随换行符

转载 作者:行者123 更新时间:2023-12-04 02:15:12 30 4
gpt4 key购买 nike

我正在使用 awk 处理一些程序文件,删除调试部分。其中一些文件没有尾随换行符。我想让 awk 逐行打印文件,带有换行符,但如果不存在则不在末尾添加额外的换行符。

例如

a
b // no newline after the "b"

变成了这个:

a
b<NEWLINE>

我不想添加这个换行符的原因是我正在尝试使用 cmp --silent $file $file_without_debug_sections 来确定是使用原始文件还是新文件.我关心 that 的原因是我试图限制编译器输出中具有调试扩展名的文件数量。仅使用不同的非调试版本也可以清楚地知道哪些文件被这个“删除调试部分”过程更改了。

总而言之,我怎样才能让 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;
}

我尝试用 printf "%s", $0 替换末尾的 print。但随后它从每一行中省略了一个换行符。

最佳答案

将您的print line 语句更改为printf "%s%s", line, RT

例如

$ seq 3 > s3
$ head -c -1 s3 > s3nn # remove last newline
$ awk '$1=$1{printf "%s%s", $0, RT}' s3nn
1
2
3$ awk '$1=$1' s3nn
1
2
3
$ cat s3nn
1
2
3$

在您的情况下,不带参数的 print 等于 print $0

关于awk - 使用 awk 打印文件而不添加尾随换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615809/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com