最近在用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 <
2. '>':将内容全局覆盖式的加入文件,相当于删除该文件并重新建立该文件,再写入的效果
ls * > test.txt ,将ls * 的所有信息输出到文件test.txt中
3. '>!':如果存在则覆盖
4. '>&':执行时屏幕上所产生的任何信息写入指定的文件中
5. '>>':追加到文件中
6. '>>&':屏幕上的信息追加到文件中
换言之,虽然>和tee都无法对非标准输出的nvprof命令结果做操作,我只需要换用>&依然可以保存这些结果到本地文件。问题解决!