我想用linux命令行工具列出一组在文本文件中使用的字符。我如何才能做到这一点?uniq实用程序仅在线路上工作。
uniq
ufj5ltwl1#
我会使用od
od
od -cvAnone -w1
这将列出字符,对于不可显示的字符显示\escapes。其他formats are available
\escapes
因此,要列出unique:
od -cvAnone -w1 | sort -bu
或者生成前20个直方图:
od -cvAnone -w1 | sort -b | uniq -c | sort -rn | head -n 20
看到它**Live On IdeOne**
v8wbuo2f2#
我更喜欢这样:
awk 'BEGIN{FS=""} {for(i=1;i<=NF;i++){chars[$(i)]=$(i);}} END{for(c in chars){print c;} }'
所以这个脚本是awk setipt。awk对于处理各种命令的输出很有用。此脚本包含三个部分:
第一章
BEGIN{FS=""}
从这里www.example.com http://www.gnu.org/software/gawk/manual/html_node/Field-Splitting-Summary.html#Field-Splitting-SummaryFS ==""记录中的每个字符都成为一个单独的字段。(这是一个gawk扩展;它不是由POSIX标准指定的。2)
{for(i=1;i<=NF;i++){chars[$(i)]=$(i);}}
chars只是一个一维关联数组(http://www.gnu.org/software/gawk/manual/html_node/Array-Basics.html#Array-Basics)。我在处理每个字符的同时在其中添加值。3)
chars
END{for(c in chars){print c;} }
最后一部分-遍历整个数组chars并打印其索引。www.example.com http://www.gnu.org/software/gawk/manual/html_node/Scanning-an-Array.html#Scanning-an-Array附言至于@sehe的处理方式。查找相对较大的文本文件。使用关联数组要快6倍以上:
>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
vs91vp4v3#
下面是一种Perl方式,它打印Unicode码位和字符本身:
perl -C7 -ne 'for (split(//)) {print sprintf("U+%04X", ord)." ".$_."\n"}' $Your_File | sort -u
或多行以提高可读性:
perl -C7 -ne 'for ( split(//) ) { print sprintf("U+%04X", ord) . " " . $_ . "\n" }' $Your_File \ | sort -u
3条答案
按热度按时间ufj5ltwl1#
我会使用
od
这将列出字符,对于不可显示的字符显示
\escapes
。其他formats are available示例:
因此,要列出unique:
或者生成前20个直方图:
看到它**Live On IdeOne**
v8wbuo2f2#
我更喜欢这样:
所以这个脚本是awk setipt。awk对于处理各种命令的输出很有用。
此脚本包含三个部分:
第一章
从这里www.example.com http://www.gnu.org/software/gawk/manual/html_node/Field-Splitting-Summary.html#Field-Splitting-Summary
FS ==""记录中的每个字符都成为一个单独的字段。(这是一个gawk扩展;它不是由POSIX标准指定的。
2)
chars
只是一个一维关联数组(http://www.gnu.org/software/gawk/manual/html_node/Array-Basics.html#Array-Basics)。我在处理每个字符的同时在其中添加值。3)
最后一部分-遍历整个数组
chars
并打印其索引。www.example.com http://www.gnu.org/software/gawk/manual/html_node/Scanning-an-Array.html#Scanning-an-Array附言
至于@sehe的处理方式。查找相对较大的文本文件。使用关联数组要快6倍以上:
vs91vp4v3#
下面是一种Perl方式,它打印Unicode码位和字符本身:
或多行以提高可读性: