我通过 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