【问题标题】:Bash - Read only the last 100 lines of a long Log fileBash - 只读长日志文件的最后 100 行
【发布时间】:2023-03-03 05:08:25
【问题描述】:

我正在读取一个长日志文件并使用 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 循环内的变量中没有写入任何内容。

可能有一种非常简单的方法可以做到这一点,但我看不到......

干杯, 巴勒纳肯

【问题讨论】:

  • 为什么在需要 100 的时候使用 tail -10?
  • 这只是为了测试目的,我忘了改变它。对问题没有影响。

标签: bash variables while-loop


【解决方案1】:

进程替换是常见的模式:

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

注意你不需要"$(echo $var)",你可以直接分配$var

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 2016-08-27
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多