如何将充满 UNIX 时间字符串的文件转换为人类可读的日期?
我正在处理一个充满 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
这不起作用。我得到的每行输出都是 Thu Jan 1 00:00:00 1970 。我认为换行符正在被拾取,这就是它不起作用的原因。有什么想法吗?我使用的是 Mac OSX,这有什么不同。
I am processing a file full of unix time strings. I want to convert them all to human readable.
The file looks like so:
1153335401
1153448586
1153476729
1153494310
1153603662
1153640211
Here is the script:
#! /bin/bash
FILE="test.txt"
cat $FILE | while read line; do
perl -e 'print scalar(gmtime($line)), "\n"'
done
This is not working. The output I get is Thu Jan 1 00:00:00 1970 for every line. I think the line breaks are being picked up and that is why it is not working. Any ideas? I'm using Mac OSX is that makes any difference.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
由于
$line
使用单引号,因此 bash 不会处理它,因此$line
被视为(未定义的)Perl 变量而不是 bash 变量。您不需要
while read
bash 循环; Perl 可以使用其-n
选项自行进行循环。(使用 -E 启用
say
,它会自动附加换行符)Because
$line
is in single quotes, it's not being processed by bash, and so$line
is treated as an (undefined) Perl variable rather than a bash variable.You don't need a
while read
bash loop; Perl can do the looping itself using its-n
option.(using -E to enable
say
, which automatically appends a newline)不要使用
cat
。Don't use
cat
.这不是换行符,而是 Perl 脚本中的
$line
与 bash 脚本中的$line
是不同的变量。您可以尝试:注意双引号,它允许 bash 进行变量插值。
It's not the line breaks, it's that the
$line
inside the Perl script is a different variable than the$line
in the bash script. You could try:Note the double-quotes, which allow bash to do variable interpolation.
不需要 Perl:
No need for Perl:
问题是您没有为
$line
变量分配任何内容,因此它默认为零值,这就是为什么您总是得到 Thu Jan 1 00:00:00 1970 作为输出。gbacon的答案与 Perl 中的一样流畅。
The issue is that you haven't assigned anything to the
$line
variable, so it defaults to a zero-value, which is why you always get Thu Jan 1 00:00:00 1970 as an output.gbacon's answer is about as slick as it gets in Perl.
GNU 日期/xargs 解决方案:
GNU date/xargs solution:
这个简单的命令就可以了
This simple command will do
不要忘记 Perl 中可以使用 localtime() 代替 gmtime()
因此,如果冬天你不在格林威治,则可以使用 localtime(),例如
Perl 代码:
输出:
Not forgetting that localtime() can be used instead of gmtime() in Perl
So, if you're not in Greenwich in Winter, you can use localtime(), e.g.
Perl code:
output: