ディレクトリには、次の内容を含む多くのファイルがあります。
入力する:
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
したがって、2つのステップには2つのステップが必要です。
INPUT -> 最初の列の前の "filenameXXX.txt" -> OUTPUT1
OUTPUT1 -> Unix時間を通常の時間に変換 - > OUTPUT2
bash、sed、またはperlを使用してこれを行うには? [すべて必要なく、1つで十分です:D] ええと、
2つの部分に分ける必要があり ます
。
答え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
入力ファイルの名前が不明で日付を変換できないため、使いにくく、利点は無視できます。