[英]How can I expand arguments to a bash function into a chain of piped commands?
[英]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.8
, GNU grep 2.6.3
和GNU 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.