Sorting 单词表的多线程排序和修复

Sorting 单词表的多线程排序和修复,sorting,utf-8,sed,parallel-processing,uniq,Sorting,Utf 8,Sed,Parallel Processing,Uniq,我正在整理我的词表。我想删除:所有空白,除了每个单词中的一个之外的所有副本,所有非UTF-8字符。我还想先按最小值对列表进行排序 I/O问题较少,因为我运行的是SSD,因此我希望多线程执行此脚本。下面的脚本似乎删除了很多内容 #!/bin/bash page=`grep '' -R "wordlist.txt" | iconv -f utf8 -t utf8 -c | parallel --pipe "sed -e 's/[[:space:]]/\n/g' | grep -v '^$'"

我正在整理我的词表。我想删除:所有空白,除了每个单词中的一个之外的所有副本,所有非UTF-8字符。我还想先按最小值对列表进行排序

I/O问题较少,因为我运行的是SSD,因此我希望多线程执行此脚本。下面的脚本似乎删除了很多内容

#!/bin/bash
page=`grep '' -R "wordlist.txt"  | iconv -f utf8 -t utf8 -c | 
parallel --pipe  "sed -e 's/[[:space:]]/\n/g' | grep -v '^$'" |
parallel --pipe  sed '/[^a-zA-Z1-9]/d' | parallel --pipe  sort -u | parallel --pipe  uniq`

echo "$page" > wordlistfixed.txt
脚本删除的内容太多。 我在列表中有5个单词“and”,它们都被删除了。没有留下“和”一词的条目。我相信这是由于使用了
sort-u | uniq
。我见过几个脚本使用这个,但是一些研究让我相信
sort | uniq
=
sort-u
,这使得我使用
sort-u | uniq
毫无意义。我之所以使用并行,是因为以前的脚本受到CPU使用的限制,而不是I/O的限制

这个单词列表的目的是做一些密码强度分析

更新: 我在这个脚本上取得了一些进展

cat in.txt | parallel --pipe sed -e 's/[[:space:]]/\n/g'|  grep -v '^$' |
parallel --pipe sed '/[^a-zA-Z0-9]/d' |  sort -u  > out.txt

这似乎做了我想要的一切,除了删除不需要的字符。

请注意,shell在管道中并行运行所有程序;您真的不需要
并行
程序。由于您的最终管道不包括
iconv
转换,因此不需要的字符没有全部正确删除也就不足为奇了。最后一个
sed
命令删除任何包含非字母数字字符的行,这可能有点戏剧性

iconv -f utf8 -t utf8 -c wordlist.txt |  # Remove invalid UTF-8 byte sequences
tr -s '[:space:]' '\n' |                 # Convert white space to newlines
sed '/^[:space:]*$/d' |                  # Delete blank lines (one at most)
sort -u > wordlistfixed.txt              # Sort the data eliminating duplicates

表面上看,这应该足够了。请注意,这也避免了UOOC(无用使用
cat
)奖。

您能否提供一个示例,说明脚本删除了太多内容?您希望它删除什么?它实际上删除了什么?为什么需要并行?wordlist.txt中有多少个单词?《牛津英语词典》只有60万字。这个问题带来了很多其他问题。为什么
页面=…
。为什么
grep'-R..
。其他。。。对于您试图实现的目标,几乎可以肯定有一个更简单的解决方案。考虑编辑你的问题,包括一个小样本的单词集,你需要的那个样本的输出,以及你当前的输出。Good luck.sed不适用于UTF-8.sed'/[^a-zA-Z0-9]/d'这将删除包含非字母数字字符而非字符的行,这是您想要的吗?您可能需要:sed的//[^a-Z0-9]//g'这将删除所有非字母数字字符,同时保留行中的任何其他字符。