技术解析

awk '{printf $0"\t"}' | awk '{print $0}' 输出会自动换行?
0
2021-07-05 03:03:48
idczone
假设原本 sh test.sh 输出为:
aaaaabbbbb
cccccddddd <---输出两行结束

执行下面语句 1:
sh test.sh | awk '{printf $0"\t"}'
输出为:(为了清楚,这里用____表示\t)
[email protected]: <---注意这里没换行

执行下面语句 2:
sh test.sh | awk '{printf $0"\t"}' | awk '{print $0}'
输出为:(为了清楚,这里用____表示\t)
aaaaabbbbb____cccccddddd____ <---注意这里换行了
[email protected]:

请问为什么会这样呢?
\n

@KentY

一个是 printf ,一个是 print
printf 不带换行, print 默认会输出换行

搜索一下不就有了吗?
一个 printf 一个 print
http://bbs.chinaunix.net/thread-1437213-1-1.html
shell 的 print??
你是指 awk 的 print 和 printf 吧
print 输出指定内容后换行, printf 只输出指定内容后不换行



原来是我漏看了,还研究了半天

怎么 @我了?
print 并不是输出内容并换行, 只是缺省换行.
在 awk 里, print 和 printf 的区别是, print 输出当前记录(行 record), 并在最后自动加上 ORS ( 默认是\n ,但可以是任何字符串). 而 printf 是按给定格式输出内容, 你给它 ORS 参数, 它就输出 ORS, 没给就不输出.
有一点要注意的, 类似 printf $0 这种应该在实际代码中避免. 要写 printf "%s", $0 看起来繁琐, 但是一旦$0 里包含%, 代码就容易出错.如果使用了 printf, 就要用格式和参数形式.
my 2 cents

上面内容 :
"但是" 一旦$0 里包含%,
里的"但是"是多余的, 应该删掉. sorry.

看到 awk 的自然反应

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服