use*_*456 4 bash scripts awk uniq
我想在一组字符串中只保留一个排列并计算每个排列的出现。
为了使事情更清楚,我想转换(例如)
ab
acf
ba
cfa
acf
Run Code Online (Sandbox Code Playgroud)
进入
2 ab
3 acf
Run Code Online (Sandbox Code Playgroud)
其中 2 和 3 分别是 {a,b} 和 {a,c,f} 的排列数。
您将如何以最直接的方式在 bash 中做到这一点?
Perl 来救援!
perl -lne '$h{ join "", sort split // }++ }{ print "$h{$_} $_" for keys %h' < input_file
Run Code Online (Sandbox Code Playgroud)
-n 逐行读取输入-l 从输入中删除换行符,向输出添加换行符split // 将字符串拆分为字符sort 对它们进行排序(因此具有唯一性)join "" 从字符列表中创建一个字符串%h是一个哈希表,键是排序字符的字符串,值是出现次数:++每次遇到增加 ( )}{ “爱斯基摩问候语”——在输入用完后分离代码运行