gpt4 book ai didi

awk 使用列中少于 3 个唯一字符的过滤器

转载 作者:行者123 更新时间:2023-12-05 08:22:01 26 4
gpt4 key购买 nike

我在文件中有一个数据集

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

但是我得不到任何结果。

最佳答案

您的代码所做的事情与您在需求中似乎陈述的完全不同。您遍历行中的标记(在第一行,有两个标记,1AAA)并检查您看到它们的次数。如果行中有三个以上的唯一标记,您的脚本就会打印出来,而您永远不会这样做。

您似乎正在寻找的概念是 substr()函数,它允许您循环遍历字符串中的各个字符(例如)。

awk 'BEGIN{FS="\t"; OFS="\t"}
{ unq=0; delete seen; for (i=1; i<=length($2); i++) if(!seen[substr($2, i, 1)]++) unq++ }
unq >= 3' file

要开始调试您自己的代码,请尝试添加 print在各个战略位置进行声明,以验证您看到的是您所期望的;如果你不这样做,你就发现了一个错误。例如,应该很容易看出 for (i=1; i<=$NF; ++i) print $i遍历输入行的字段。

关于awk 使用列中少于 3 个唯一字符的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66673777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com