将Shell的输出保存为文档

/ 0评 / 0

最近在用bash script处理nvprof结果的时候遇到了一个麻烦。nvprof的结果无法直接通过awk命令做数据提取。于是便准备将输出结果保存为文件再调用awk script操作。想法挺美好,但是好不容易调对了awk语法,却发现nvprof命令的输出并非传统的print,无法直接通过>保存为txt,后来又尝试了tee命令,依旧徒劳。

在我几乎准备放弃,采用script曲线救国的时候,看到了博客园咸鱼翻身记的博文,这才解决了问题。转载原文做个记录,也希望能帮到有类似问题的人:

在做批量实验室,例如跑批量MR的作业,我们会写好shell脚本,然后启动脚本,等所有作业执行完再去看结果,但是这些执行时的信息如何保存下来到文件中? 下面这个命令可以完成这个任务。

sh batchjob.sh 2>&1 | tee mylog.log

其中sh batchjob.sh表示要执行的shell脚本;数字0,1,2在linux分别表示标准输入、标准输出和标准错误信息输出。
特别总结下重定向问题:
输入输出重定向之:'<' and '>'
'<' and '>'分别用来支持linux中的输入输出重定向,其中'<'支持输入重定向,'>'支持输出重定向。
1. '<':重定向输入
         sh test.sh < hadoop-hadoop-jobtracker-brix-00.out,将hadoop-hadoop-jobtracker-brix-00.out的内容作为test.sh的输入
2. '>':将内容全局覆盖式的加入文件,相当于删除该文件并重新建立该文件,再写入的效果
        ls * > test.txt ,将ls * 的所有信息输出到文件test.txt中
3. '>!':如果存在则覆盖
4. '>&':执行时屏幕上所产生的任何信息写入指定的文件中
5. '>>':追加到文件中
6. '>>&':屏幕上的信息追加到文件中

换言之,虽然>和tee都无法对非标准输出的nvprof命令结果做操作,我只需要换用>&依然可以保存这些结果到本地文件。问题解决!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注