我希望变量sum/NR在每次迭代中并排打印。如何避免awk在每次迭代中打印换行符?在我的代码中,每次迭代默认打印换行符
for file in cg_c ep_c is_c tau xhpl
printf "\n $file" >> to-plot.xls
for f in 2.54 1.60 800
awk '{sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
done
done
我希望输出是这样的
cg_c ans1 ans2 ans3
ep_c ans1 ans2 ans3
is_c ans1 ans2 ans3
tau ans1 ans2 ans3
xhpl ans1 ans2 ans3
电流输出是这样的
**cg_c**
ans1
ans2
ans3
**ep_c**
ans1
ans2
ans3
**is_c**
ans1
ans2
ans3
**tau**
ans1
ans2
ans3
**xhpl**
ans1
ans2
ans3
我想很多人在进入这个问题时都在寻找一种方法来避免awk中的新行。因此,我将提供一个解决方案,因为特定上下文的答案已经解决了!
在awk中,print在打印后自动插入ORS。ORS代表“输出记录分隔符”,默认为新行。所以无论什么时候你输入"hi" awk都会输出"hi" + new line。
这可以通过两种不同的方式改变:使用空ORS或使用printf。
使用空ORS
awk -v ORS= '1' <<< "hello
man"
这将返回“helloman”。
这里的问题是,并非所有awks都接受设置空的ORS,因此您可能必须设置另一个记录分隔符。
awk -v ORS="-" '{print ...}' file
例如:
awk -v ORS="-" '1' <<< "hello
man"
返回“hello-man——”。
使用printf(最好)
虽然print在记录之后附加ORS,但printf没有。因此,printf "hello"只打印"hello",没有其他。
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
最后,请注意,这通常会遗漏最后一个新行,因此shell提示符将与输出的最后一行在同一行中。要清除这个错误,请使用END {print ""},以便在所有处理之后打印新行。
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345