如何在多个文件中插入第一列 + 如何将 unix 时间转换为正常时间

Lan*_*nes 2 shell perl text-processing date

目录中有很多文件,其中包含以下内容:

输入:

root    1324711901
sshd    1272725792
Run Code Online (Sandbox Code Playgroud)

我正在寻找如何将文件内容转换为以下内容的解决方案:

输出 1:

filenameXXX.txt root    1324711901
filenameXXX.txt sshd    1272725792
Run Code Online (Sandbox Code Playgroud)

输出 2:

filenameXXX.txt root    Sat Dec 24 08:31:41 CET 2011
filenameXXX.txt sshd    Sat May  1 16:56:32 CEST 2010
Run Code Online (Sandbox Code Playgroud)

所以在两个阶段需要两件事:

INPUT -> "filenameXXX.txt "在第一列之前 -> OUTPUT1

OUTPUT1 -> 将 unix 时间转换为正常时间 -> OUTPUT2

如何使用 bash OR sed OR perl 做到这一点?[只有1并不需要在所有的足够:d]

ehh..and我需要它在两个部分[所以两个一班轮]:
-输入到OUTPUT1
- OUTPUT1到OUTPUT2

现场分隔符“\ t”的-s [标签]!

man*_*ork 5

我更喜欢gawk这个:

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

这里也是一种perl选择:

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

正如您还问到的bash,这是它可以做的:

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

关于sed,它的使用会很困难,而且它的好处是微不足道的,因为它无法说出其输入文件的名称和转换日期。