seh*_*ehe 12
我用了 od
od -cvAnone -w1
Run Code Online (Sandbox Code Playgroud)
这将列出显示\escapes
不可显示的字符.其他格式可用
所以,列出唯一的:
od -cvAnone -w1 | sort -bu
Run Code Online (Sandbox Code Playgroud)
或者产生前20个直方图:
od -cvAnone -w1 | sort -b | uniq -c | sort -rn | head -n 20
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种方式:
awk 'BEGIN{FS=""} {for(i=1;i<=NF;i++){chars[$(i)]=$(i);}} END{for(c in chars){print c;} }'
Run Code Online (Sandbox Code Playgroud)
所以这个脚本是awk setipt.awk对于处理各种命令的输出很有用.
这个脚本有三个部分:
1)
BEGIN{FS=""}
Run Code Online (Sandbox Code Playgroud)
FS ==""记录中的每个字符都成为一个单独的字段.(这是一个gawk扩展;它没有由POSIX标准指定.)
2)
{for(i=1;i<=NF;i++){chars[$(i)]=$(i);}}
Run Code Online (Sandbox Code Playgroud)
chars
只是一维关联数组(http://www.gnu.org/software/gawk/manual/html_node/Array-Basics.html#Array-Basics).我在处理每个char时在其中添加值.
3)
END{for(c in chars){print c;} }
Run Code Online (Sandbox Code Playgroud)
最后一节 - 遍历整个数组chars
并打印其索引.http://www.gnu.org/software/gawk/manual/html_node/Scanning-an-Array.html#Scanning-an-Array
PS.
至于@sehe的处理方式.寻找一个相对较大的文本文件.使用关联数组的速度提高了六倍:
>time od -cvAnone -w1 vector.html.big | sort -bu > /dev/null
real 0m1.597s
user 0m1.619s
sys 0m0.022s
>time awk 'BEGIN{FS=""} {for(i=1;i<=NF;i++){chars[$(i)]=$(i);}} END{for(c in chars){print c;} }' vector.html.big | sort >/dev/null
real 0m0.252s
user 0m0.251s
sys 0m0.002s
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6222 次 |
最近记录: |