我想使用Linux命令行工具列出文本文件中使用的一组字符。我该如何实现?
唯一的实用程序
唯一的实用程序
uniq
只能在行上操作。| sort -bu
已经在我的答案中展示了 :) - seheod -cvAnone -w1
工作,然后我将其唯一排序(这正是我所需要的),然后回到这里点赞和评论,所有这些都没有阅读你帖子的其余部分(直到现在)。 - delliottgod -cvAnone -w1 <<< défaillir
命令输出的结果与预期不符。 - Alexx Rocheawk 'BEGIN{FS=""} {for(i=1;i<=NF;i++){chars[$(i)]=$(i);}} END{for(c in chars){print c;} }'
因此,这个脚本是一个awk脚本。awk对各种命令输出的处理非常有用。
这个脚本分为三部分:
1)
BEGIN{FS=""}
FS == "" 每个记录中的每个字符都成为一个单独的字段。(这是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)。在处理每个字符时,我会向其中添加值。END{for(c in chars){print c;} }
chars
并打印其索引。 http://www.gnu.org/software/gawk/manual/html_node/Scanning-an-Array.html#Scanning-an-Array
PS.>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
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
awk 'BEGIN{FS=""} {for(i=1;i<=NF;i++){chars[$(i)]=$(i);}} END{for(c in chars){print c;} }'
或者awk 'BEGIN{FS=""} {for(i=1;i<=NF;i++) print $(i);};' file.txt | sort | uniq
。 - user184968