提问人:Mikee 提问时间:8/31/2023 更新时间:8/31/2023 访问量:55
如何在 Linux 中将当前日期添加到重定向命令中?
How to add the current date into a redirect command in Linux?
问:
我目前正在将程序的输出重定向到文件,如下所示
python checkTemps.py >> test.txt
这会在每次运行时将新的 CSV 数据行附加到 test.txt
71.2, 74.1, 63.8, 69.2, 74.64, 73.85, 76.08
我想在每行的开头插入当前日期/时间,后跟逗号,如下所示
2023-08-30_20:45, 71.2, 74.1, 63.8, 69.2, 74.64, 73.85, 76.08
我不知道如何执行 echo 命令并附加逗号并在一行中运行 python 应用程序。这是我尝试过的众多变体之一
echo $(date +%Y-%m-%d_%H:%M), python checkTemps.py >> test.txt
答:
2赞
paxdiablo
8/31/2023
#1
与其尝试自己执行此操作,不如实际上有一个(时间戳)程序可以用作过滤器来自动添加时间戳。ts
默认格式是可用的,但您也可以指定与 兼容的格式,例如以下包括秒数以明确它正在工作(您想要的格式应为 '“%Y-%m-%d_%H:%M,”):strftime
pax$ ( for i in {1..5}; do sleep ${i}; echo line ${i}; done ) | ts "%H:%M:%S"
11:21:18 start
11:21:19 line 1
11:21:21 line 2
11:21:24 line 3
11:21:28 line 4
11:21:33 line 5
这样做的好处是,你可以只接受“正常”输出,并通过管道将整个事情原封不动地通过,而不是改变每一个输出语句。ts
我甚至编写了无需干预即可自动执行时间戳的脚本:
pax$ cat prog.sh
#!/usr/bin/env bash
# This is the magic here.
if [[ "${TS_ACTIVE}" -ne 1 ]]; then TS_ACTIVE=1 "$0" "$@" | ts "%H:%M:%S"; exit; fi
echo start "$@"
for i in {1..5}; do
sleep ${i}
echo line ${i}
done
pax$ ./prog.sh abc d ef
11:41:30 start abc d ef
11:41:31 line 1
11:41:33 line 2
11:41:36 line 3
11:41:40 line 4
11:41:45 line 5
评论
0赞
David C. Rankin
8/31/2023
想象一下,一个简短、简洁的 Linux 实用程序,为解决这个特定问题而编写,我承认在发现之前已经用 C 语言重新发明了轮子——而且这是 Linux 使用很多年......:)
ts
0赞
Mikee
9/2/2023
David C. Rankin在MS和Windows工作了30 +年后转向Linux,我看到了Linux的许多轮子。
评论
ts
python checkTemps.py | ts '%Y-%m-%d_%H:%M, ' >> test.txt