如何使用shell实时处理尾部-f新线条



linux服务器上有一个文件,新行将其附加到 aperiodically 上。我需要处理新行,解析并使用其他命令或脚本对其进行处理。定期检查文件是不可接受的,我需要一个实时解决方案。服务器上只有其他语言(Python,Perl(,只有Shell。

现在,我正在尝试将新行分配给Shell变量,然后对其进行处理。但是找不到这样做的好方法。另一个问题是,在处理新线路时,我需要依靠以前的结果。例如,当我处理第11行时,也许需要第五行结果。因此,在之前存储结果需要一些变量,我需要在循环中使用它们。

对我的情况有任何解决方案或任何更好的建议吗?

尝试下面的代码

#!/bin/bash
process_new_line() {
    local var= '' #declare some local variables here 
    read
    while true
    do
        #process $REPLY 
        #The new line content is in the variable $REPLY 
        #store the result in the local variable according to your rules.
        read
    done
}
tail -f the_file | process_new_line

使用功能将解决您的问题。您可以使用本地变量存储结果,$回复保留新的行内容。

尝试:

tail -f filename | while read -r line; do
    : # process the line
done

这将是实时的,除非线条缓冲。如果缓冲困扰您,则有stdbuf这样的实用程序来收缩缓冲区。

您没有提及您的系统是否尴尬。UNIX系统的POSIX标准要求它。如果有的话,它非常适合"计算,替换一些字符" 等:

tail -f filename | awk 'awk code'

最新更新