【问题标题】:Shell scripting - how to get all files with a common name, and order those filesShell 脚本 - 如何获取具有通用名称的所有文件,并对这些文件进行排序
【发布时间】:2012-02-07 08:03:54
【问题描述】:

所以我正在学习 shell 脚本的强大功能并喜欢它,但我真的很难用它...

我有一堆文件命名为: 签到.10 签到.11 签到.12

后面的数字。将始终是 # 并按顺序上升。

我需要在一个目录中找到所有 checkin.* 文件,并返回文件名中 # 最高的文件。所以对于上述文件,我需要返回'checkin.12'。我的逻辑是获取所有 checkin.* 文件名,遍历它们并将 # 与存储在变量中的前一个文件的 # 进行比较。如果当前文件的 # 较高,我将变量 # 更新为当前文件 #,如果它较低,则转到下一个。通过这种方式,我能够将 checkin.12 返回为最高 # 并执行我需要对 checkin.12 执行的操作。必须有更好的方法来做到这一点,希望有人可以向我展示另一种方法的示例。

【问题讨论】:

    标签: shell awk ksh nawk


    【解决方案1】:
    ls checkin.* | sort -t. -n | tail -1
    

    【讨论】:

    • 天哪! sort我怎么错过了?我现在觉得很脏。 +1 .. 如果您想使用 head 然后 ls checkin.* | sort -t. -rn | head -n +1head -n +1 <(sort -t. -rn <(ls checkin.*)) 但做得很好,先生!
    • 请注意,sort 命令中存在边际作弊——实际上是疏忽和疏忽;它对第一个字段进行数字排序(即名称“checkin”,因此它总是排序等于和为零),然后是实际的数字后缀。通过使用sort -t. -k 2n(在第二列上按数字排序),您应该能够略微提高性能(我不确定您是否能够测量它)。结果是一样的,这一次。有时候,我只是运气好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2019-03-28
    • 2023-03-31
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多