awk - awk 在列中使用少于 3 个唯一字符的过滤器
问题描述
我在文件中有一个数据集
1 AAA
1 AAAB
1 AAABC
2 ABCD
2 ABCDE
3 AABB
3 AABCD
3 ABCDE
3 ABBCCDE
期望的输出
1 AAABC
2 ABCD
2 ABCDE
3 AABCD
3 ABCDE
3 ABBCCDE
我努力了 :
awk 'BEGIN{FS="\t"; OFS="\t"} {
unq=0; delete seen; for (i=1; i<=NF; i++) if (!seen[$i]++) unq++} unq > 3' file
但我无法得到任何结果。
解决方案
与perl
:
$ perl -MList::Util=uniq -lane 'print if scalar(uniq split(//,$F[1])) > 2' ip.txt
1 AAABC
2 ABCD
2 ABCDE
3 AABCD
3 ABCDE
3 ABBCCDE
$F[1]
有第二列,然后使用空的正则表达式将其拆分为字符。从此数组中,使用删除重复项uniq
,然后使用获取数组的大小scalar
类似的解决方案ruby
:
ruby -lane 'print if $F[1].chars.uniq.size > 2'
推荐阅读
- html - 使用 VBA 获取 div 中的所有元素
- spring - Spring Batch - 使用 JobExecution 时获取属性文件值
- java - 删除多个列表中的重复元素java 8
- php - 会话数组在其父 while 循环之外打印时仅存储一个值
- php - 依赖注入,如何注入“其他”对象?
- javascript - JS - 如何在遍历数组时计算(过滤的)单词
- ios - 一位测试员给了我两封电子邮件以添加到试飞中——但我似乎无法同时添加它们
- c# - 尝试对列表中的随机字符串使用“==”运算符
- spring-boot - 解析json类型的请求体的问题,包含一个字符串列表到Spring响应中的字符串Flux
- python - 如何在 Flask 应用程序中显示从前端发送的 Flash 消息?