如何找出列表中的空白?

如何找出列表中的空白?

因此,我分配了一些文件(167k),现在它们已经按正确的顺序排列,这要感谢这里的 Serg 脚本 -https://askubuntu.com/a/686829/462277

现在我需要找出文件名之间的差距,差距应该是15个或更多

Aaaa.bb - 000002 tag tag_tag 9tag  
Aaaa.bb - 000125 tag tag_tag 9tag  
Aaaa.bb - 000130 tag tag_tag 9tag  

它们都有相同的开头和不同的结局。
所有内容都在外部硬盘中。

答案1

find . -maxdepth 1  -type f -regextype posix-awk -iregex ".*[:digit:]"| sort | awk '{  if ( ($3 - previous) > 15 ) print previous"**"$3}{ previous=$3 }'

上述代码使用find命令匹配当前目录中所有包含数字的文件,对它们进行排序,然后传递给awkawk遍历列表,将字段 3 中的每个数字存储到变量中previous,并在下一个项目中previous与当前数字进行比较

答案2

一个 Python 版本(准确地说是 python3)。

以以下名称保存程序diff_filename.py(使其可执行)并以以下方式使用它:

$ ./diff_filename.py the/directory/containing/the/files

该程序假定您想要比较的数字始终位于文件名的相同位置(索引 10:16)。

现在,它非常冗长,并打印出正确的文件名,包括差异。一旦它遇到不尊重最小差异的文件名,它就会将其打印出来并停止。

这是源代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

'''
usage: ./diff_filename.py the/directory/containing/the/files
'''

import os
import  sys

MIN_DIFF = 15

the_dir = sys.argv[1]
sorted_files = sorted(os.listdir(the_dir))

last_number = None
last_file = None
for current_file in sorted_files:
    current_number = int(current_file[10:16])
    if last_number is None:
        last_number = current_number
        last_file = current_file
        continue
    diff = current_number - last_number
    if diff < MIN_DIFF:
        print('fail! "{}" and "{}" do not respect MIN_DIFF={}'.format(
            last_file, current_file, MIN_DIFF))
        break
    else:
        print('ok! "{}" and "{}" diff={}'.format(last_file, current_file, diff))

    last_number = current_number
    last_file = current_file

相关内容