如何从字符串列表中仅获取 a 排列中的一项

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 中做到这一点?

cho*_*oba 7

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是一个哈希表,键是排序字符的字符串,值是出现次数:++每次遇到增加 ( )
  • }{ “爱斯基摩问候语”——在输入用完后分离代码运行