Perl 如何将一个满是unix时间字符串的文件转换为人类可读的日期?
我正在处理一个满是unix时间字符串的文件。我想把它们都转换成人类可读的 文件看起来是这样的:Perl 如何将一个满是unix时间字符串的文件转换为人类可读的日期?,perl,bash,unix-timestamp,Perl,Bash,Unix Timestamp,我正在处理一个满是unix时间字符串的文件。我想把它们都转换成人类可读的 文件看起来是这样的: 1153335401 1153448586 1153476729 1153494310 1153603662 1153640211 以下是脚本: #! /bin/bash FILE="test.txt" cat $FILE | while read line; do perl -e 'print scalar(gmtime($line)), "\n"' done 这是行不通的。对于每一行,我得到的
1153335401
1153448586
1153476729
1153494310
1153603662
1153640211
以下是脚本:
#! /bin/bash
FILE="test.txt"
cat $FILE | while read line; do
perl -e 'print scalar(gmtime($line)), "\n"'
done
这是行不通的。对于每一行,我得到的输出是1970年1月1日星期四00:00:00。我认为断线被发现了,这就是它不起作用的原因。有什么想法吗?我使用的是Mac OSX,这很重要。不需要Perl:
awk '{ print strftime("%c", $0) }' somefile.txt
$perl-lne'print scalar gmtime$\ux'test.txt
2006年7月19日星期三18:56:41
2006年7月21日星期五02:23:06
2006年7月21日星期五10:12:09
2006年7月21日星期五15:05:10
2006年7月22日星期六21:27:42
Sun Jul 23 07:36:51 2006因为
$line
在单引号中,所以它没有被bash处理,因此$line
被视为(未定义的)Perl变量,而不是bash变量
读取时不需要bash循环;Perl可以使用其-n
选项自行完成循环
perl -nE 'say scalar(gmtime($_))' test.txt
(使用-E启用比如说
,它会自动追加换行)问题是您没有为$line
变量分配任何内容,因此它默认为零值,这就是为什么您总是将1970年1月1日星期四00:00:00作为输出的原因
与Perl中的一样流畅。GNU日期/xargs解决方案:
xargs -i date -d "1970-01-01 00:00:00 {} seconds" </tmp/timestamps
xargs-i date-d“1970-01-01 00:00:00{}秒”不要使用cat
#! /bin/bash
file="test.txt"
while read line
do
date -d @$line
done < "$file"
#/bin/bash
file=“test.txt”
读行时
做
日期-d@$行
完成<“$file”
这不是换行符,而是Perl脚本中的$line
与bash脚本中的$line
是不同的变量。你可以试试:
perl -e "print scalar(gmtime($line)),qq/\\n/"
请注意双引号,它允许bash执行变量插值。这个简单的命令就可以了
cat time.txt | while read line; do date -ud @$line; done > string.txt
不要忘记在Perl中可以使用localtime()代替gmtime()
因此,如果冬天不在格林威治,可以使用localtime(),例如
Perl代码:
my $unixtime = 1417014507;
my $humantime = localtime($unixtime);
print "\$humantime = $humantime \n";
输出:
$humantime = Wed Nov 26 15:08:27 2014
或者-lne
对于5.10之前版本的PerlI,它已经习惯于与猫
战斗,就像你但我停止一样。我发现它在命令行工作中非常实用cat foo | grep bar |……
似乎比更好,如果你想获得一个无用的cat使用奖,你就不能避开cat。@brian:我有一个装满它们的架子。有几个好答案。但我不得不把它交给巴肯。这一班机真是太棒了。谢谢大家的帮助。如果我没有混合使用bash和perl,那会更好。@skymook谢谢!我很高兴它能帮上忙。golfed:perl-lpe'$\gmtime$\u'test.txt
也不需要awk。Perl解决方案和awk解决方案基本上是一样的。
$humantime = Wed Nov 26 15:08:27 2014