【发布时间】:2014-07-02 07:12:36
【问题描述】:
我有一个脚本需要按数字顺序对多个文件进行 CAT。虽然它似乎可以很好地处理几百个文件,但我现在在处理更大的文件时遇到了一些“有趣”的结果。
相关文件已拆分为 1289 个单独的文件,分别命名为 ABC.001-1289 到 ABC.1289-1289
我正在使用“ls -gGo ABC* | sort -hk9”来列出文件,我认为这是一种人类可读的排序顺序。一切顺利,直到我击中 ABC.763-1289:
ABC.001-1289 .. ABC.763-1289
ABC.1000-1289 .. ABC.1040-1289
ABC.764-1289 .. ABC.999-1289
ABC.1041-1289 .. ABC.1289-1289
我正在考虑某种缓冲区溢出或其他问题,但我以前从未经历过这样的事情,我有点摸不着头脑,甚至开始寻找解决问题的地方。
我尝试改变“k”值,甚至删除它,但收效甚微。
我研究得越多,我就越相信需要 KEYDEF,但我无法确定使用它的正确格式....
有什么想法吗?
【问题讨论】:
-
我不明白你为什么使用
-k9,因为这会使每个项目的密钥等于1289。 -
Adrian, TBH 我只是想为“k”值找到正确的格式。我以前没有做过这样的“高级”排序,只能假设 ls 之间的空格被认为是列之间的分隔符。我尝试的任何格式,当第 764 个文件出现时,我似乎总是遇到问题。
-
问题是您的字段有时是三个字符,有时是四个字符。我很想用
sort -n -k5,8来隔离变量项,但实际上“8”会有所不同。也许你应该先重命名三位数的文件。