如何在程序产生输出时执行命令?记录每次打印的时间戳
给程序输出每行添加时间戳的解决方案
你的问题出在date命令在管道中只会执行一次,它不会主动处理前序程序的每一行输出。以下几种方法可以实现每次程序输出一行内容时,都附加当前的日期时间:
方法1:使用awk(跨平台通用)
awk可以逐行处理输入内容,并通过内置函数生成时间戳,直接拼接后输出:
./program_out | awk '{print strftime("[%Y-%m-%d %H:%M:%S]"), $0}' >> fileout
strftime("[%Y-%m-%d %H:%M:%S]"):生成带格式的时间戳,你可以根据需求调整格式(比如去掉方括号、修改时间显示样式)$0:代表当前读取到的程序输出行内容- 最终效果是每行输出前都会加上当前的时间戳,然后追加到
fileout中
方法2:使用ts工具(简洁高效,需额外安装)
如果你的系统是Debian/Ubuntu类,先安装包含ts工具的moreutils包:
sudo apt install moreutils
之后直接用ts给每行输出打时间戳:
./program_out | ts '[%Y-%m-%d %H:%M:%S]' >> fileout
ts是专门为行输出添加时间戳的工具,支持自定义时间格式,用法比awk更简洁。
方法3:Shell循环逐行处理
用原生Shell的while循环逐行读取程序输出,每次读取一行就调用date获取当前时间:
./program_out | while IFS= read -r line; do echo "$(date +"%Y-%m-%d %H:%M:%S") $line" >> fileout done
IFS= read -r line:确保完整读取每行内容(包括空格、特殊字符)date +"%Y-%m-%d %H:%M:%S":自定义时间格式,格式规则和strftime一致
内容的提问来源于stack exchange,提问作者Ruben Dario Guarnizo Martinez
相关产品推荐
相关产品推荐

