0

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

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

我可以手动编写最少的脚本吗?

注意:我知道如何编写代码,谢谢,问题是关于预先存在的工具,可能使用最少的脚本胶水。除非程序很短,否则程序也awk算作“脚本”。

注2:这是一个学习问题。如果解决方案是短的还是长的,我不太在意(虽然更短是更可取的)。我想学习解决这个问题的其他方法。

如果我想以最快的方式解决这个问题,我不会在这里问这个问题,我会花 30 秒用我最熟悉的语言写三行。

4

1 回答 1

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实用程序。与按字段计数的配对也许可以解决问题。但我保证它会更毛茸茸。

聚苯乙烯。我会在这里添加它,因为评论框太狭窄了。Alexander,您需要在 POSIX 系统上运行一些东西。该任务涉及一些逻辑。无论是将其放入工具的脚本中,还是放入带有多个命令的长管道中 - 数量大致相同。由于awk设计用于生成报告,在这种情况下它是一个很好的工具。
基本上你没有很多方法来格式化文本 - 它是printf实用程序/内置或awk. 在前一种情况下,这意味着脚本中大约有三行,还有更多行来产生结果。所以我认为没有更短的方法。但是从我有限但长期的经验来看,这是一种理论。我也想知道一种更简单的方法,如果有的话,我也想学习:)

于 2011-02-15T12:37:31.620 回答