簡體   English   中英

如何將當前時間戳連接到bash上的管道輸入?

[英]How can I concatenate the current timestamp to a piped input on bash?

我想使用ts或awk(gawk)命令來連接管道輸入上的時間戳。 但是,程序的開始時間是固定的。 我想連接輸入發生時刻而不是固定時間的時間戳。

命令在這里

top | grep compiz |ts '%H:%M:%S' | awk '{print $1, $11}' > cpu_timestamp.txt

在這里輸出(按'q'退出頂部)

16:23:04 37.5
16:23:04 4.0
16:23:04 4.0
16:23:04 3.7
16:23:04 2.3
16:23:04 1.7

但是,我想要這樣

16:23:04 37.5
16:23:05 4.0
16:23:06 4.0
16:23:07 3.7
16:23:08 2.3
16:23:09 1.7

這對我來說是命令“bash”

top -b | grep --line-buffered "bash" | ts '%H:%M:%S' | awk '{print $1, $11}'

輸出:

09:52:58 0.1
09:52:58 0.0
09:52:58 0.1
09:53:01 0.1
09:53:01 0.0
09:53:01 0.1
09:53:04 0.1
09:53:04 0.0
09:53:04 0.1
...

我用Linux top: procps version 3.2.8GNU grep 2.6.3GNU Awk 3.1.7

我不知道ts做什么,但是用gawk打印每行輸入的當前時間你只需要調用strftime(),當你使用awk時你永遠不需要grep所以我懷疑你需要GNU awk所需要的是:

top | awk '/compiz/{strftime("%H:%M:%S"), print $1, $11}' > cpu_timestamp.txt

您可能需要在管道中的某個地方添加對UNIX工具stdbuf的調用,如果緩沖被證明是一個問題,但如果您之前的管道工作,那么我也期望這個。

如果您只是詢問目標流程,這可能會快得多:

ps -C compiz u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      4236  0.0  0.0      0     0 ?        S<   oct01   0:00 compiz

要么

ps -C compiz ho pcpu
 0.1

然后:

printf "%(%T)T %6.2f\n" -1 $(ps -C compiz ho pcpu)
10:37:37   0.10

while :;do printf "%(%T)T %6.2f\n" -1 $(ps -C compiz ho pcpu) ; sleep 3 ; done
10:38:31   0.10
10:38:34   0.20
10:38:37   0.10
10:38:41   0.10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM