2015-04-22 82 views
0

我试图打印语句的结果添加为文件t1.dat新列:如何在awk中使用print命令的输出添加新列?

awk '/Time in seconds/ {print $5}' bt.B.1.log > t1.dat 
awk '/Total processes/ {print $4; exit}' bt.B.1.log >> t1.dat 

内容bt.B.1.log的:以秒

时间= 260.37
总流程= 1

输出:(t1.dat)

260.37 
1 

希望的输出:

260.37 1 

但是,现在,awk将它作为t1.dat中的新行追加。如何在不使用中间文件的情况下将其作为新列添加到现有文件中(在本例中为t1.dat)?

+1

可能重复[AWK不打印换行符(http://stackoverflow.com/questions/2021982/awk-without-printing-newline) – Ferrybig

+1

你为什么不这样做两个打印在1 awk脚本? –

+0

我正在做这两个打印分开,因为它是一个更大的问题的一部分。 – Lucas

回答

1
awk 'BEGIN{ORS=" "} {if(NR==1) {print $5} else {print $4}}' bt.B.1.log 

ORSoutput records separator的缩写。也许埃德莫顿有一个更简单的方法来做到这一点。

或者:

awk '{if(NR==1) {printf $5} else {printf " "$4"\n"}}' bt.B.1.log 

你想在年底或不换行?

+0

这两种解决方案都可以在终端上正常工作。但现在我陷入了另一个问题。这些awk命令不能在gnuplot的“系统”调用中工作(这是更大的问题)。示例(从gnuplot提示符中):system“awk”{if(NR == 1){printf $ 5} else {printf“”$ 4“\ n”}}'bt.B.1.log“。第一个解决方案给出错误消息';'预计在第二个双引号中,第二个解决方案在n之前的反斜杠中给出错误消息无效字符\。我的同事和我一直在寻找彻底的解决方案,但还没有。任何想法可能有帮助? – Lucas

+0

只需用反斜杠'\'来转义字符即可。也许问一个标签为gnuplot的新问题。 –

+0

工作,非常感谢! – Lucas

0

另一种方式:

$ awk -"F=" '{ result = $2; getline; result = (result $2); print result; }' bt.B.1.log 
260.37 1 
+0

从码头内工作。 – Lucas