仅将STDOUT的最后一行重定向到文件

时间:2011-01-27 20:53:41

标签: bash shell unix

我正在编译Scala代码并将输出控制台输出写入文件中。我只想在文件中保存STDOUT的最后一行。这是命令:

scalac -Xplugin:divbyzero.jar Example.scala >> output.txt

scalac -Xplugin的输出:divbyzero.jar Example.scala是:

helex@mg:~/git-repositories/my_plugin$ scalac -Xplugin:divbyzero.jar Example.scala | tee -a output.txt
You have overwritten the standard meaning
Literal:()
rhs type: Int(1)
Constant Type: Constant(1)
We have a literal constant
List(localhost.Low)
Constant Type: Constant(1)
Literal:1
rhs type: Int(2)
Constant Type: Constant(2)
We have a literal constant
List(localhost.High)
Constant Type: Constant(2)
Literal:2
rhs type: Boolean(true)
Constant Type: Constant(true)
We have a literal constant
List(localhost.High)
Constant Type: Constant(true)
Literal:true
LEVEL: H
LEVEL: H
okay
LEVEL: H
okay
false
symboltable: Map(a -> 219 | Int | object TestIfConditionWithElseAccept2 | normalTermination | L, c -> 221 | Boolean | object TestIfConditionWithElseAccept2 | normalTermination | H, b -> 220 | Int | object TestIfConditionWithElseAccept2 | normalTermination | H)
pc: Set(L, H)

我只想保存pc:在输出文件中设置(L,H)而不是其余部分。借助哪个命令我可以实现我的目标?

5 个答案:

答案 0 :(得分:27)

只需通过tail -n 1将标准输出到您的文件

答案 1 :(得分:6)

您可以使用tail

scalac -Xplugin:divbyzero.jar Example.scala | tail -1 >> output.txt

答案 2 :(得分:6)

scalac ... | awk 'END{print>>"output.txt"}1'

这将把所有内容传递给stdout 将最后一行追加到output.txt。

答案 3 :(得分:4)

在Bash和其他支持进程替换的shell中:

command | tee  >(tail -n 1 > outputfile)

将完整输出发送到stdout,输出的最后一行发送到文件。您可以这样做,将最后一行附加到文件而不是覆盖它:

command | tee  >(tail -n 1 >> outputfile)

答案 4 :(得分:1)

关于这个尾部命令只是一个小精度。如果程序输出标准错误,则必须重定向

示例:

apachectl -t 2>&1 | tail -n 1

重定向:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html