使用Unix中的Tail读取快速附加日志时输出失真

时间:2018-02-08 00:19:28

标签: unix tail file-read

我正在使用tail函数来读取接近460个日志文件,这些日志文件会同时附加所有文件。我试图读取的数据是字节分隔的固定宽度。请在下面找到我使用的命令:

find ###Directory### -mmin -2  -type f -name FileNameString*.log | xargs tail -qf -n -1

日志文件的预期格式如下:

KS0A2018020723594007G58P5CNSSHAGPRGGWS G      NH 0962201803061535PEK  HND  C 999   9 9CC91 990C 900 99
KS0A2018020723594007G58P5CNSSHAGPRGGWS G      NH 5702201803060910PEK  NRT  C 444   0 4  0  40   00  44

但我在输出中看到的格式如下:

KS0A2018020723594912V1KY7USSCNTNPRAAPI P      AA 3735201802111632IAH  OR3903G7YI0HKSQUNAPRAAPI P      AA 1583201812241935DEN  DFW  P 7 7  777777777 7 7  7  7
KS0A2018020723593952G56SCKRSGKORPRGFLCNG      AZ 0758201809301515FCO  ICN  P07100007017070010 00 7007

tail函数正在扭曲文件的读取方式。 使用tail或任何等效命令正确读取格式的任何指导都将有很大帮助。

2 个答案:

答案 0 :(得分:1)

-z需要tail选项。

$ find /path/to/ -mmin -2  -type f -name FileNameString*.log | xargs tail -qf -z -n -1
   -z, --zero-terminated
          line delimiter is NUL, not newline

最好使用-exec find

$ find /path/to/ -mmin -2 -type f -name "FileNameString*.log"  -exec tail -qf -z -n -1 {} \+

答案 1 :(得分:0)

如果我们在没有为Xargs分配参数的情况下执行Xargs,则输出中将始终存在失真(因为它往往会扭曲线形成)。 所以,

find ###Directory### -mmin -2  -type f -name FileNameString*.log | xargs tail -qf -n -1

总是会导致输出失真,因为没有可控制的方式来读入或写入输出。

但是,如果我们可以使用-I以受控方式将输入变量传递给Xargs,那么它运行良好。就我而言,

find ###Directory### -mmin -2  -type f -name FileNameString*.log | xargs -I% tail % -qf -n -1

生成了我期望的输出格式。但是,如果要传递给Xargs的变量列表很长,这可能是执行速度较慢的一个。