如何从文件中仅取出与任何文件(两个或多个文件)中的任何其他单词都不匹配的唯一单词?

尼基尔·切克
#!/bin/sh
for file1 in directorypath/*
do
    for file2 in directorypath/*
         do
               if [ "$file1" = "$file2" ]; then 
                      echo "files are same"
               else


                                 cp /dev/null /home/temp.txt
                 grep -f $file1 $file2 > /home/common.txt
                 grep -v -x -f /home/common.txt $file1 > /home/temp.txt
                                 cp /dev/null $file1
                                 cat /home/temp.txt >> $file1


                                 cp /dev/null /home/temp.txt
                 grep -v -x -f /home/common.txt $file2 > /home/temp.txt
                                 cp /dev/null $file2
                 cat /home/temp.txt >> $file2

                fi;
         done
done

此代码适用于小文件。由于我要处理大文本文件,因此即使在服务器计算机上,此代码也花费了太多时间。请帮忙!我如何有效地实现相同的目标?提前致谢。

试试这个 python 脚本(以目录为参数):

import sys
import os

# Keeps a mapping of word => file that contains it
# word => None means that that word exists in multiple files
words = {}

def process_line(file_name, line):
    try:
        other_file = words[line]
        if other_file is None or other_file == file_name:
            return
        words[line] = None
    except KeyError:
        words[line] = file_name

file_dir = sys.argv[1]
for file_name in os.listdir(file_dir):
    with open(os.path.join(file_dir, file_name)) as fd:
        while True:
            line = fd.readline()
            if len(line) == 0:
                break
            line = line.strip()
            if len(line) == 0:
                continue
            process_line(file_name, line)

file_descriptors = {}
# Empty all existing files before writing out the info we have
for file_name in os.listdir(file_dir):
    file_descriptors[file_name] = open(os.path.join(file_dir, file_name), "w")

for word in words:
    file_name = words[word]
    if file_name is None:
        continue
    fd = file_descriptors[file_name]
    fd.write("%s\n" % word)

for fd in file_descriptors.values():
    fd.close()

内存要求:

您需要能够一次在内存中保存所有独特的单词。假设文件之间有很多重复,这应该是可行的。否则,老实说,我没有看到比您已经拥有的方法更快的方法。

如果您最终无法在内存中容纳所需的所有内容,请查看此答案,了解使用基于磁盘的解决方案来处理 dict 而不是将其全部保存在内存中的可能方法。我不知道这会对性能有多大影响,以及它在那时是否仍然运行得足够快。

为什么它更快?(理论上,未经测试)

它只对每个文件进行一次传递就完成了。您当前的方法是文件数量O(n^2)在哪里n

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

找出文件中与String数组中的任何单词都不匹配的单词数

来自分类Dev

如何使用Windows中的任何命令行(例如,Python或任何其他基于Windows的语言/软件)来增加和减少文件中的单词

来自分类Dev

具有相同名称的两个静态变量(两个不同的文件),并在任何其他文件中外部一个

来自分类Dev

如何确定其他两个相同清单中的唯一附加文件?

来自分类Dev

如何从Unix或Linux的一组文件中的哪个文件中查找单词集中的任何单词?

来自分类Dev

如何从Bootstrap 4输入文件中清除任何其他先前选择的文件

来自分类Dev

对于文件中每个可能的两个唯一单词对,打印出该对出现的次数

来自分类Dev

比较两个文本文件并在java中显示唯一的单词

来自分类Dev

awk ::如何在两个文件中查找匹配的单词

来自分类Dev

如何将文件中的两个单词放入数组的一个索引中?

来自分类Dev

如何检测URL位置是否在此页面以及同一域的任何其他子文件夹中

来自分类Dev

Python:如何检查文本文件中是否存在两个或多个给定的单词

来自分类Dev

如何只更改外国批处理文件中的一个特定行,而不影响任何其他行?

来自分类Dev

如果任何一个单词的名称相同,则将文件移动到文件夹中

来自分类Dev

如何基于UNIX中的一个匹配列合并两个csv文件。两个文件中列的位置都不同

来自分类Dev

如何匹配这些单词中的任何一个,但仅匹配.NET Regex列表中的最后一个

来自分类Dev

如何匹配查询中带有一个或多个单词但查询中没有任何单词的行?

来自分类Dev

比较两行并打印两个文件中不匹配的单词

来自分类Dev

如何删除与“用户|文件夹|其他”中的任何模式匹配的文件或目录?

来自分类Dev

如何仅使用OSX中的终端命令从两个文件中查找不常见的单词?

来自分类Dev

如何在PHP中使用空格将文本文件中的两个或三个单词匹配

来自分类Dev

如何在文件名中搜索多个单词(以任何顺序)-GUI(或终端)

来自分类Dev

连接两个文件中的匹配ID,以及两个文件中的其他列

来自分类Dev

如何加载和编辑richtexbox中的.docx/.doc文件或winforms中的任何其他控件,文档格式正确?

来自分类Dev

计算两个文件中的重复单词

来自分类Dev

删除文件中两个单词之间的字符

来自分类Dev

比较两个文件并仅打印与字符串不匹配的行的第一个单词

来自分类Dev

仅获取子文件夹的文件夹大小,而忽略任何其他内容?

来自分类Dev

有没有一种方法可以使用FC命令显示两个文件不同的确切位置?或在Windows中比较2个文件的任何其他好方法?

Related 相关文章

  1. 1

    找出文件中与String数组中的任何单词都不匹配的单词数

  2. 2

    如何使用Windows中的任何命令行(例如,Python或任何其他基于Windows的语言/软件)来增加和减少文件中的单词

  3. 3

    具有相同名称的两个静态变量(两个不同的文件),并在任何其他文件中外部一个

  4. 4

    如何确定其他两个相同清单中的唯一附加文件?

  5. 5

    如何从Unix或Linux的一组文件中的哪个文件中查找单词集中的任何单词?

  6. 6

    如何从Bootstrap 4输入文件中清除任何其他先前选择的文件

  7. 7

    对于文件中每个可能的两个唯一单词对,打印出该对出现的次数

  8. 8

    比较两个文本文件并在java中显示唯一的单词

  9. 9

    awk ::如何在两个文件中查找匹配的单词

  10. 10

    如何将文件中的两个单词放入数组的一个索引中?

  11. 11

    如何检测URL位置是否在此页面以及同一域的任何其他子文件夹中

  12. 12

    Python:如何检查文本文件中是否存在两个或多个给定的单词

  13. 13

    如何只更改外国批处理文件中的一个特定行,而不影响任何其他行?

  14. 14

    如果任何一个单词的名称相同,则将文件移动到文件夹中

  15. 15

    如何基于UNIX中的一个匹配列合并两个csv文件。两个文件中列的位置都不同

  16. 16

    如何匹配这些单词中的任何一个,但仅匹配.NET Regex列表中的最后一个

  17. 17

    如何匹配查询中带有一个或多个单词但查询中没有任何单词的行?

  18. 18

    比较两行并打印两个文件中不匹配的单词

  19. 19

    如何删除与“用户|文件夹|其他”中的任何模式匹配的文件或目录?

  20. 20

    如何仅使用OSX中的终端命令从两个文件中查找不常见的单词?

  21. 21

    如何在PHP中使用空格将文本文件中的两个或三个单词匹配

  22. 22

    如何在文件名中搜索多个单词(以任何顺序)-GUI(或终端)

  23. 23

    连接两个文件中的匹配ID,以及两个文件中的其他列

  24. 24

    如何加载和编辑richtexbox中的.docx/.doc文件或winforms中的任何其他控件,文档格式正确?

  25. 25

    计算两个文件中的重复单词

  26. 26

    删除文件中两个单词之间的字符

  27. 27

    比较两个文件并仅打印与字符串不匹配的行的第一个单词

  28. 28

    仅获取子文件夹的文件夹大小,而忽略任何其他内容?

  29. 29

    有没有一种方法可以使用FC命令显示两个文件不同的确切位置?或在Windows中比较2个文件的任何其他好方法?

热门标签

归档