目录中有很多文件,其中包含以下内容:
输入:
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
,它的使用会很困难,而且好处也微不足道,因为它无法分辨其输入文件的名称并转换日期。