我希望变量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中的ORS(输出记录分隔符)变量默认为“\n”,并在每行之后打印。如果您希望连续打印所有内容,则可以在BEGIN部分中将其更改为“”。


awk的{总和+ = $ 3};{printf“% f”,结束/ NR}和{file} _ {f}美元的_v1.xls > > to-plot-p.xls

默认情况下,Print将插入换行符。你不希望发生这种情况,因此使用printf代替。


的一种方法

awk '/^\*\*/{gsub("*","");printf "\n"$0" ";next}{printf $0" "}' to-plot.xls

我想很多人在进入这个问题时都在寻找一种方法来避免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

如果Perl是一个选项,下面是一个使用fedorqui的例子的解决方案:

Seq 5 | perl -ne 'chomp;打印“$_”;结束{打印“\ n”}’

解释: Chomp删除换行符 打印"$_ "打印每行,并附加一个空格 END{}块用于打印换行符

输出:1 2 3 4 5


你可以像这样简单地动态使用ORS:

awk '{ORS="";打印($1" "$2" "$3" "$4" "$5" ");口服补液盐= " \ n ";打印($6-=2*$6)}' file_in > file_out


下面是不需要printf和END的awk方法(假设你的输入小于500 MB):

Seq 199 | mawk NF=NF RS='^$' FS='\n' OFS=

123456789101112131415161718192021222324252627282930313233343
536373839404142434445464748495051525354555657585960616263646
566676869707172737475767778798081828384858687888990919293949
596979899100101102103104105106107108109110111112113114115116
117118119120121122123124125126127128129130131132133134135136
137138139140141142143144145146147148149150151152153154155156
157158159160161162163164165166167168169170171172173174175176
177178179180181182183184185186187188189190191192193194195196
197198199

(为了可读性重新格式化-它是一行,结尾是\n)

如果你只是想在中间加个空格:

Seq 19 | mawk 'NF &&——NF' RS='^$' FS='\n'

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

如果您不介意多一个尾随空格,那么它就更简单了

奶奶奶奶