我正在尝试对我的单词表进行排序。我想删除:所有空白区域,除了每个单词之外的所有重复项,都是非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
除了删除不需要的字符外,这似乎可以做我想要的一切。
答案 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
)奖。