我有一个以制表符分隔的对象列表,如下所示:
apple yellow
orange green
apple red
pear blue
apple yellow
apple yellow
我想使用Linux命令行工具将其转换为表格:
yellow green red blue
apple 3 0 1 0
orange 0 1 0 0
pear 0 0 0 1
我可以手动编写最少的脚本吗?
注意:我知道如何代码这个,谢谢,问题是关于预先存在的工具,可能还有 minimal 脚本胶水。 awk
程序,除非它们非常短,否则算作“脚本”。
注2:这是一个学习问题。如果解决方案很短或很长,我不在乎(虽然更短是优选的)。我想学习解决这个问题的其他方法。
如果我想以最快的方式解决这个问题,我不会在这里提出这个问题,我会花30秒钟用我最熟悉的语言写三行。
答案 0 :(得分:3)
在awk中:
awk '{num[$1,$2]++; fruits[$1]=1; colors[$2]=1}END{for(i in fruits) {for(j in colors) printf("%d ", num[i,j]); printf("\n");}}'
PS。作为事后的想法...你可以调查join
效用。与字段计数配对可能这将成功。但我保证会发白。
PPS。我会在这里添加它,因为评论框太狭窄了。
亚历山大,你需要在POSIX系统上运行一些东西。这项任务涉及一些逻辑。它被放入一个工具的脚本,或一个带有几个命令的长管道 - 数量保持大致相同。由于awk
旨在生成报告,因此在这种情况下它是很好的工具
基本上你没有很多方法来格式化文本 - 它是printf
实用程序/内置或awk
。在前一种情况下,它意味着脚本中有大约三行,而另一些则表示产生结果。所以我认为这不是缩短的方式。但是,从我有限的长期经验来看,这是一种理论。我也想知道一个更简单的方法,如果有一个,我也想学习:)