2017-03-08 8 views
0

Ich brauche die Dateinamen am Ende jeder Zeile hinzuzufügen .. das ist, wie ich es tun ..append Dateinamen zu jeder Zeile

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 

Das Problem ist das Ergebnis ..

hier eine Linie 20170302105D AAA.AAAE AR 1111 HHH1,0PPP

hier, wie es

könnte

20170302105D AAA.AAAE AR 1111 HHH1,0PPPXYZ_FILENAME

oder

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

Hier ist stattdessen das Ergebnis

20170302105D AAA.AAAE AR 1111 HHH1,0PPP

XYZ_FILENAME

20160307205D bbb.bbbE AR 12511 HHH1,0PPP

XYZ_FILENAME

So ist es den Dateinamen als neue Zeile anhängt .. Wie kann ich es lösen ?

Danke

Antwort

1

Es stellte sich heraus, dass Endungen Windows-Linie, die die Probleme verursacht wurden.


Wie auch immer ich empfehle diesen einzelnen awk Befehl dafür zu verwenden.

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

(das ist alles, keine Shell-Schleife)

+0

Nope..I das gleiche Ergebnis –

+0

Sieht aus wie die Eingabedatei Windows-Zeilenende hat? Wenn ja, konvertiere sie in UNIX, bevor du 'awk' darauf ausführst – hek2mgl

+1

yep jetzt funktioniert es, danke –

Verwandte Themen