将计数的命中数排序为单独的文件

时间:2017-09-12 13:05:58

标签: string text sh

我有short.txt(包含字符串)和long.txt(包含字符串)。

例如,short.txt包含:

long.txt包含: 这
THISIS

thisisan
thisisanexample

我有一个源代码,可以计算short.txt中的字符串是否在long.txt中。

grep -F -o -f short.txt long.txt |排序| uniq -c | sort -nr> counts.txt

所以counts.txt将包含:
3这个 1那

我的问题是:如何在单独的文件中得到结果,如:
3_this.txt(所以命中数+ _ + word + .txt)
(其中包含) 这
THISIS
thisisan
thisisanexample
1_that.txt
(包含)

小名单可以包含10.000+个字符串,长列表是100.000.000 +

我正在玩.sh,因为我可以轻松地在我的MAC上运行它。不知道你是否有更快的解决方案。
long.txt将在每个月更新,但每天都会更新。\ / p>

2 个答案:

答案 0 :(得分:2)

简单的Python解决方案。这并不假设您已创建counted.py

import os

with open('short.txt', 'r') as shorttxt:
    for s in shorttxt:
        outfilename = s[:-1] + '.txt'
        count = 0
        with open('long.txt', 'r') as longtxt, open(outfilename, 'w') as out:
            for l in longtxt:
                if s[:-1] in l:
                    count += 1
                    out.write(l)
        os.rename(outfilename, str(count) + '_' + outfilename)

答案 1 :(得分:1)

所有这些都是实现结果的相当迂回且低效的方式,但如果您已经完成了所有这些并创建了counted.txt,您可以使用它来创建所需的文件:

while read count word; do
  grep -F "$word" long.txt >"${count}_${word}.txt"
done < counted.txt

但是,像Pulkit Agarwal的回答一样,你会更好。