编辑。解决方案:我最终在 mysql 中创建了连接表并使用 mysql 语句,因为它匹配整个字符串而不是部分字符串。我使用 notepad++ 中的正则表达式为所有 1800 多个条目创建语句。例如: UPDATE my_table SET city_id = "747"WHERE city_id = "城市名称";
<小时/>我有一个包含 1800 多行城市名称的文本文件,我需要处理该文件以将城市名称替换为要用作数据库中连接表的主键的数值。我有一个有效的 shell 脚本可以做到这一点,但有大量重复的单词会导致问题。
我的问题是城市名称包含相同的单词,例如“Francisco”示例:
CITY = ID
Francisco = 11
San Francisco = 25
South San Francisco = 35
Franciscoville = 99
我想要实现的是:
CITY = ID
11 = 11
25 = 25
35 = 35
99 = 99
我得到的是这样的(仅供引用:我将东西放入 PS 脚本的查找表中的顺序似乎并不重要):
CITY = ID
11 = 11
San 11 = 25
South San 11 = 35
11ville = 99
我想要做的是提取所有单词,如“Francisco”示例(即:包含重复项的最短字符串)并将它们放入单独的 txt 文件中。
另外,如果你看一下这个例子,我实际上必须运行几次。一旦我将“Francisco”行放入单独的文本文件中,我现在遇到了一个新的重复问题,“San Francisco”也出现在包含“South San Francisco”的行中。
任何帮助将不胜感激,我希望我已经把问题说得足够清楚以便理解。
编辑:我应该注意,我不知道实际上有多少重复项或重复项是什么,我只知道有很多。我想要实现的目标是找到重复项,然后处理它们。
最佳答案
我正在尝试为您的替换操作提出一个通用解决方案。
假设您的多行中有单词Francisco,并且想要为它们分配不同的 ID。这是相同的正则表达式。
正则表达式: .*Francisco.*( = (\d*))
说明:
- 这将匹配其中包含单词
Francisco
的行,后跟ID
。
替换: \2\1
\2
是捕获的ID
。\1
是= ID
的一部分。
Regex101 Demo
关于mysql - 如何确保大型文本/csv 文件中的任何位置都没有重复的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35925966/