如何从单词列表中删除特定键?

如何从单词列表中删除特定键?

我通过 crunch 生成了一个从 03000000000 开始到 03999999999 结束的键单词列表。

所以我想要的是从中删除特定数量的键,例如我想删除从03509999999到03999999999开始的键。

所以我想知道如何轻松地做到这一点。由于单词列表文件有 12 GB,我什至无法打开它来手动执行此操作,但我更愿意通过终端中的一些简单命令来执行此操作。

我有卡利Linux。

答案1

假设单词在一行上并且已排序,您可以执行以下操作:

head --lines 509999999 input_file

如果文件看起来像:

03000000000 03509999998 03509999999 03510000000 03999999998
03000000001 03999999999 03000000002

(即未排序且一行中有多个条目)您可以使用以下 python 程序:

import sys

def read(fp):
    buf = ""
    while True:
        if ' ' in buf or '\n' in buf:
            try:
                word, buf = buf.split(None, 1)
            except ValueError:
                word, buf = buf.strip(), ""
            if word:
                yield word
        if not buf:
            buf = fp.read(100)
        if not buf:
            yield None

with open(sys.argv[1]) as fp:
    for x in read(fp):
       if x is None:
           break
       if sys.argv[2] <= x <= sys.argv[3]:
           continue
       print x

从...开始python test.py inputfile 03509999999 03999999999。输出的单词顺序与原始单词的顺序相同,但所有单词都以换行符分隔。

答案2

如果每行都定位单词,那么您可以使用 awk,

awk '$0 >= 03509999999 && $0 <= 03999999999 {next;}{print}' file

相关内容