【问题标题】:Convert Unix timestamp in human readable将 Unix 时间戳转换为人类可读的
【发布时间】:2021-03-14 13:27:02
【问题描述】:

我有以下脚本

size=$1

big_files_list=$(find . -name \*.bytes -type f -printf "%b %h/%f\n" |

                awk -v size="$size" '

                                function basename(file) {

                                                sub(".bytes$", ".properties", file)

                                                return file

                                                }

                                {if ($1 > size) {

                                                print basename($2) }}')

for i in ${big_files_list}; do
                echo "\t"
                grep -E 'size|repo-name|creationTime|ob-name|sha' $i | tr "\n" ","

done

在输出下方打印

size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555

which grep and prints date from files where creationTime is in unix timestamp 我知道我们可以使用 date -d @1603278566981 将其转换为可读但记录很多,

我们可以在最终输出之前以任何方式对其进行转换。所以最终输出应该如下所示

size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555

请帮忙,

武士


编辑:这是上面的代码格式更好的可读性:

size=$1

big_files_list=$(
    find . -name \*.bytes -type f -printf "%b %h/%f\n" |
    awk -v size="$size" '
        function basename(file) {
            sub(".bytes$", ".properties", file)
            return file
        }
        {
            if ($1 > size) {
                print basename($2)
            }
        }
    '
)

for i in ${big_files_list}; do
    echo "\t"
    grep -E 'size|repo-name|creationTime|ob-name|sha' $i | tr "\n" ","
done

【问题讨论】:

  • 这些记录来自 52775 年?!? :) 我认为您的 date 调用误解了这些时间戳的单位。
  • @Samurai 您在空格方面的代码格式会伤害而不是有助于提高可读性,因此我在您的问题底部发布了格式更好的代码,以便您可以看到差异并可能在您的将来的代码。
  • 为什么不处理通过awk打印相关数据的find找到的所有文件。您也可以使用 awk 的 strftime 函数来处理 unix 时间戳。
  • 自 1970-01-01 纪元以来,您的时间戳显然是 毫秒,而不是 Unix 标准中的秒数。 Java 使用毫秒样式。除以 1000 - awk 可以轻松做到@RamanSailopal

标签: linux shell unix awk unix-timestamp


【解决方案1】:

如何使用 GNU awk:

awk '/size|repo-name|creationTime|ob-name|sha/ {
                 print
     }
     /creationTime/ {
                 split($0,map,"-");
                 dat=(map[2]/10000000)-11644473600;
                 print "creationTime="strftime("%c",dat)
     } $(find <fulldirectorypath> -name "*.bytes" -size="+$size" -type f -printf "%h/%f\n" | awk '{ split($0,map,".");print map[1]".properties" }')

首先,让 find 使用 -size 参数进行大小处理,并将输出通过管道传输到 awk 以将扩展从字节更改为属性。然后用 awk 处理这些文件。对于除 creationTime 之外的所有条目,只需打印行。对于创建时间,处理 unix 时间戳并以语言环境形式打印。

这还没有经过测试,所以可能有错误。

【讨论】:

  • 我尝试了下面的事情 awk 'BEGIN {FS=OFS=" "}{$3=strftime("%c",$3)} {print}' 输出文件并能够转换时间戳大小 repo-name 1970 年 1 月 1 日星期四 01:00:00 AM CET ob-name sha1 992198 测试上传 52775 年 11 月 16 日星期日 10:29:41 PM CET cargotracker-master.zip ca8bb4e3ddb802a228e945a8fe32c308b2e3d555 992198 testupload 11 月 16 日星期日下午 52775 CETtracker: .zip ca8bb4e3ddb802a228e945a8fe32c308b2e3d555 但我想我需要修剪最后三位数以获得准确的时间以及如何跳过第一行你能指导我如何做到这一点
  • $3=substr($3,length($3)-3)
  • 如果解决方案满足您的需求,请花时间接受它作为答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多