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

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

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

输入:

root    1324711901
sshd    1272725792

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

输出1:

filenameXXX.txt root    1324711901
filenameXXX.txt sshd    1272725792

输出2:

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

因此,两个阶段需要两件事:

INPUT -> 第一列之前的“filenameXXX.txt” -> OUTPUT1

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

如何使用 bash 或 sed 或 perl 执行此操作? [不需要总共只需要1个就足够了:D]

呃..我需要它分为两部分[所以两个单行]:
- INPUT 到 OUTPUT1
- OUTPUT1 到 OUTPUT2

字段分隔符是“\t”-s [标签]!

答案1

我更喜欢gawk这个:

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

perl也是一种替代方案:

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

正如您还询问的那样bash,它可以执行以下操作:

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

对于sed,它的使用会很困难,而且好处也微不足道,因为它无法分辨其输入文件的名称并转换日期。

相关内容