首页 > 解决方案 > 试图从动态 NF 文件中获取最后 4 个不同的值

问题描述

我需要从文件中的每条记录中获取最后 4 个唯一值。文件由逗号分隔,不同记录的列数可以不同。我的输入文件。

$ cat last_cols.txt
F
F,B
F,B,A
F,B,A,F
F,B,A,F,B
F,B,A,F,B,G
F,B,A,F,B,G,E
F,B,A,F,B,G,E,F
F,B,A,F,B,G,E,F,E
F,B,A,F,B,G,E,F,E,B
F,B,A,F,B,G,E,F,E,B,A
F,B,A,F,B,G,E,F,E,B,A,D
F,B,A,F,B,G,E,F,E,B,A,D,F
F,B,A,F,B,G,E,F,E,B,A,D,F,E
F,B,A,F,B,G,E,F,E,B,A,D,F,E,E
F,B,A,F,B,G,E,F,E,B,A,D,F,E,E,D
$

我需要的输出:

F,
B,F,
A,B,F,
A,B,F,
A,B,F,
A,B,F,G,
B,E,F,G,
B,E,F,G,
B,E,F,G,
B,E,F,G,
A,B,E,F,
A,B,D,E,
A,B,D,F,
A,D,E,F,
A,D,E,F,
A,D,E,F,

尝试获取输出

 awk -F, ' { split("",arr); for(i=NF;i>0;i--) { if(!$i in arr && length(arr)<4 ) arr[$i]=1 }; for(i in arr) printf("%s,",i); print "" } ' last_cols.txt

我只是得到空行。

由于这将在 bash env 中运行,我也欢迎其他解决方案。

标签: perlawk

解决方案


请您尝试以下方法:

perl -F, -alne '
    for $f (reverse @F) {
        $seen{$f}++;
        last if (keys %seen) >= 4;
    }
    print join(",", sort keys %seen);
    undef %seen;
' last_cols.txt

推荐阅读