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 [标签]!
我更喜欢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
,它的使用会很困难,而且它的好处是微不足道的,因为它无法说出其输入文件的名称和转换日期。