【发布时间】: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