Friday, October 28, 2022

[SOLVED] append filename to each line

Issue

I need to add the filename at the end of each line.. this is how I do it..

 files=($(ls | grep -i -E 'XYZ_')) 

 length=${#files[*]}
 for ((i=0;i<=$(($length - 1)); i++)) 
 do
    sed "s/$/$(basename ${files[$i]}) /g" ${files[$i]} >> output
 done

The problem is the result..

here's a line 20170302105D AAA.AAAE AR 1111 HHH1,0PPP

here's how it could be

20170302105D AAA.AAAE AR 1111 HHH1,0PPPXYZ_FILENAME

or

20170302105D AAA.AAAE AR 1111 HHH1,0PPP XYZ_FILENAME

Here's instead the result

20170302105D AAA.AAAE AR 1111 HHH1,0PPP

XYZ_FILENAME

20160307205D bbb.bbbE AR 12511 HHH1,0PPP

XYZ_FILENAME

So it appends the filename as a new line.. How can I solve it?

Thank you


Solution

It turned out that Windows line endings were causing the issues.


Anyhow I recommend to use this single awk command for that.

awk '{print $0, FILENAME}' *XYZ_*

(that's all, no shell loop)



Answered By - hek2mgl
Answer Checked By - Terry (WPSolving Volunteer)