在不使用awk的情况下将对列表转换为shell中的表

时间:2011-02-15 12:26:29

标签: linux shell posix data-processing

我有一个以制表符分隔的对象列表,如下所示:

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秒钟用我最熟悉的语言写三行。

1 个答案:

答案 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。在前一种情况下,它意味着脚本中有大约三行,而另一些则表示产生结果。所以我认为这不是缩短的方式。但是,从我有限的长期经验来看,这是一种理论。我也想知道一个更简单的方法,如果有一个,我也想学习:)