perl - 试图从动态 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 中运行,我也欢迎其他解决方案。
解决方案
请您尝试以下方法:
perl -F, -alne '
for $f (reverse @F) {
$seen{$f}++;
last if (keys %seen) >= 4;
}
print join(",", sort keys %seen);
undef %seen;
' last_cols.txt
推荐阅读
- reactjs - React.js:根据 API 响应自定义侧边栏菜单
- python-3.x - 当我使用字典调用它时,函数打印无
- python-3.x - 如何在 tensorflow 2.0.0 中使用 Lazy Adam 优化器
- firebase - 有没有一种方法可以从 Firestore 的单独集合中的集合中查找数组的值?
- c# - ASP.NET WebMethod 接收 JSON 字符串?
- javascript - javascript while循环可以在10毫秒内执行一次
- kentico - 找不到支持服务 CMS.Helpers.ICurrentCookieLevelProvider 的组件
- azure-devops - 我们可以在 devops 中创建逻辑应用程序时参数化 HTTP POST 请求的 url
- laravel - stancl/tenancy 自定义数据库名称
- gatsby - 为什么我没有索引到 Algolia?