如何在 Linux 中将当前日期添加到重定向命令中?

How to add the current date into a redirect command in Linux?

提问人:Mikee 提问时间:8/31/2023 更新时间:8/31/2023 访问量:55

问:

我目前正在将程序的输出重定向到文件,如下所示

 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
Linux IO 重定向

评论

0赞 dimich 8/31/2023
另一个选项是从 moreutils: .也适用于多行输出。tspython checkTemps.py | ts '%Y-%m-%d_%H:%M, ' >> test.txt
0赞 David C. Rankin 8/31/2023
值得点头,因为你实际提供了MCRE(或MRE)来尝试解决问题。这些最近一直供不应求。

答:

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的许多轮子。