![](/img/trans.png)
[英]How can I replace a `---`-separated block with the contents of a text file, using standard Linux tools?
[英]How can I list unique characters used in a text file using linux command line tools?
我想使用linux命令行工具列出文本文件中使用的一组字符。 我怎样才能做到这一点?
uniq
实用程序仅适用于行。
我更喜欢这种方式:
awk 'BEGIN{FS=""} {for(i=1;i<=NF;i++){chars[$(i)]=$(i);}} END{for(c in chars){print c;} }'
所以这个脚本是awk setipt。 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 )。 我在处理每个char时在其中添加值。
3)
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。
至于@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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.