Cómo insert una primera columna en muchos files + cómo convertir el time de Unix al time normal

Hay muchos files en un directory que tiene, por ejemplo, el siguiente contenido:

ENTRADA:

root 1324711901 sshd 1272725792 

Y estoy buscando una solución para convertir el contenido de los files a esto:

SALIDA1:

 filenameXXX.txt root 1324711901 filenameXXX.txt sshd 1272725792 

OUTPUT2:

 filenameXXX.txt root Sat Dec 24 08:31:41 CET 2011 filenameXXX.txt sshd Sat May 1 16:56:32 CEST 2010 

Entonces, se necesitan dos cosas en dos fases:

INPUT -> "filenameXXX.txt" antes de la primera columna -> OUTPUT1

OUTPUT1 -> convertir times de Unix a times normales -> OUTPUT2

¿Cómo hacer esto usando bash OR sed O perl? [no es necesario en absoluto, solo 1 es suficiente: D]

ehh … y lo necesito en dos partes [así que dos de una línea]:
– ENTRADA a SALIDA1
– OUTPUT1 a OUTPUT2

Los separadores de campo son "\ t" -s [tabs]!

Solutions Collecting From Web of "Cómo insert una primera columna en muchos files + cómo convertir el time de Unix al time normal"

Prefiero a gawk por esto:

 awk -vOFS='\t' 'NF{$1=FILENAME OFS $1;$2=strftime("%c",$2)}1' filename.txt 

Aquí hay una alternativa de perl también:

 perl -nae 'print$ARGV,"\t",$F[0],"\t".localtime($F[1]),"\n"' filename.txt 

Como también preguntaste sobre bash , esto es lo que podría hacer:

 while read -r who when; do readlink -n /proc/$$/fd/0 echo -en "\t$who\t" date -d "@$when" done < filename.txt 

En cuanto a sed , su uso sería difícil y el beneficio sería insignificante, ya que no puede decir el nombre de su file de input y convertir la date.