相关疑难解决方法(0)

是否有一个Unix实用程序来为stdin添加时间戳?

我最后在Python中为此编写了一个快速的小脚本,但我想知道是否有一个实用程序可以提供文本,其中每个行前面都有一些文本 - 在我的特定情况下,是一个时间戳.理想情况下,使用方式如下:

cat somefile.txt | prepend-timestamp
Run Code Online (Sandbox Code Playgroud)

(在你回答sed之前,我试过这个:

cat somefile.txt | sed "s/^/`date`/"
Run Code Online (Sandbox Code Playgroud)

但是,这只会在执行sed时评估date命令,因此每行都会错误地添加相同的时间戳.)

unix shell awk

166
推荐指数
8
解决办法
7万
查看次数

如何使任何shell命令的输出无缓冲?

有没有办法在没有输出缓冲的情况下运行shell命令?

例如,hexdump file | ./my_script只会将缓冲块中的hexdump输入传递给my_script,而不是逐行传递.

实际上我想知道如何使任何命令无缓冲的一般解决方案?

stdout buffering

60
推荐指数
4
解决办法
5万
查看次数

如何将时间戳添加到STDERR重定向

在bash/ksh中我们可以为STDERR重定向添加时间戳吗?

例如myscript.sh 2> error.log

我想在日志上写一个时间戳.

shell scripting

34
推荐指数
4
解决办法
3万
查看次数

在mawk中使用strftime函数

我正在尝试创建将根据某种模式过滤输入文件的AWK脚本,并使用strftime()函数进行一些计算.

($2 ~ /^[HB]/ && $2 ~ /n$/){
        print strftime("%Y")
}
Run Code Online (Sandbox Code Playgroud)

使用的翻译是mawk.使用此命令触发此脚本时:

awk -f script3 inputFile
Run Code Online (Sandbox Code Playgroud)

我收到错误:"函数strftime从未定义"

awk strftime

8
推荐指数
2
解决办法
1万
查看次数

Bash:如何为ssh命令实时过滤tee输出?

我的目标是为我的ssh会话中使用的命令创建一个带时间戳的日志.

只要输出未被过滤,Tee就可以实时工作.当我tail -F test.log时,以下命令实时附加输出:

#!/bin/bash
ssh "$@" | tee -a test.log
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试通过此问题中建议的方法修改tee的输出时,输出不再是实时的.例如:

#!/bin/bash
ssh "$@" | tee >(grep -e '.*\@.*\:.*\$.*' --color=never >> test.log)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我用"yes"命令代替ssh命令,则输出会被实时过滤.

实时处理非常重要,因为我的脚本需要为每一行附加当前时间戳并尽可能多地删除输出.到目前为止,这是我的脚本:

#!/bin/bash
logfile=~/test.log
desc="sshlog ${@}"
tab="\t"
format_line() {
    while IFS= read -r line; do
        echo "$(date +"%Y-%m-%d %H:%M:%S %z")${tab}${desc}${tab}${line}"
    done
}
echo "[START]" | format_line >> $logfile
ssh "$@" | tee >(grep -e '.*\@.*\:.*\$.*' --color=never | format_line >> $logfile)
echo "[END]" | format_line >> $logfile
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题,为什么ssh命令与tee的行为不同于yes命令?

linux ssh bash tee

4
推荐指数
1
解决办法
3291
查看次数

标签 统计

awk ×2

shell ×2

bash ×1

buffering ×1

linux ×1

scripting ×1

ssh ×1

stdout ×1

strftime ×1

tee ×1

unix ×1