Bash - 只读取长日志文件的最后100行

时间:2016-02-09 10:50:32

标签: bash variables while-loop

我正在阅读一个很长的日志文件,并使用bash在变量中拆分列。

cd $LOGDIR
IFS="," 
while read LogTIME name md5 
do
    LogTime+="$(echo $LogTIME)"
    Name+="$(echo $name)"
    LOGDatamd5+="$(echo $md5)"
done < LOG.txt

但这真的很慢,我不需要所有的线路。最后100行就足够了(但是日志文件本身需要不同程序的所有其他行)。

我尝试使用tail -n 10 LOG.txt | while read LogTIME name md5,但这也需要很长时间,而且根本没有输出。 我测试的另一种方法是没有成功:

cd $LOGDIR
foo="$(tail -n 10 LOG.txt)"
IFS="," 
while read LogTIME name md5 
do
    LogTime+="$(echo $LogTIME)"
    Name+="$(echo $name)"
    LOGDatamd5+="$(echo $md5)"
done < "$foo"

但是这只给了我foo的输出。没有任何内容写入while循环中的变量。

这可能是一种非常简单的方法,我看不到......

干杯, BallerNacken

1 个答案:

答案 0 :(得分:2)

流程替换是常见的模式:

while read LogTIME name md5 ; do
    LogTime+=$LogTIME
    Name+=$name
    LogDatamd5+=$md5
done < <(tail -n100 LOG.txt)

请注意,您不需要"$(echo $var)",您可以直接指定$var