kkoundi
kkoundi

Reputation: 11

Distorted output while reading in the fast appending logs using Tail in Unix

I am using a tail function to read close to 460 log files which keep appending all at the same time. The data I am trying to read is byte separated fixed width.Please find below the command I use:

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

The expected format of log files is given below:

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

but the format I see in the output is as below:

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

The tail function is distorting the way files are being read. Any guidance in reading the format right using tail or any equivalent command will greatly help.

Upvotes: 0

Views: 38

Answers (2)

kkoundi
kkoundi

Reputation: 11

If we do an Xargs without assigning arguments to the Xargs, there will always be distortion in the output (as it tends to distort the line formation). So,

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

will always lead to distorted output as there is no controlled way to read in or write the output.

However, if we can pass the input variables to Xargs in a controlled manner by using -I, it was functioning well. In my case,

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

produced the output format I expected. However, this can be a on the slower side of execution if the variable list to be passed to Xargs is lengthy.

Upvotes: 0

iamauser
iamauser

Reputation: 11479

You need the -z option for 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

Better to use, -exec for find

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

Upvotes: 1

Related Questions