多线程排序和修复词表

时间:2014-02-01 16:00:01

标签: 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 '^$'" |
parallel --pipe  sed '/[^a-zA-Z1-9]/d' | parallel --pipe  sort -u | parallel --pipe  uniq`

echo "$page" > wordlistfixed.txt

脚本删除太多了。 我有5个条目"和"在列表中,所有这些都被删除。不允许输入单词"和"。我认为这是由于sort -u | uniq的使用。我已经看过几个使用此脚本的脚本,但是一些研究让我相信sort | uniq = sort -u然后使我对sort -u | uniq毫无意义。我之所以使用并行,是因为之前的抄写受到CPU使用率的限制,而不受I / O的限制。

这个词汇表的目的是做一些密码强度analasys。

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

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

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

1 个答案:

答案 0 :(得分:0)

请注意,shell无论如何都要并行运行管道中的所有程序;你真的不需要parallel计划。由于您的最终管道不包含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

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