结果

结果

我有一个包含以下内容的文件:

red dog  
red cat  
red bird  
red horse  
blue hamster  
blue monkey  
blue lion  
pink pony  
pink whale  
pink pig  
pink dolphin 

我需要为每种颜色增加一个计数器,然后为每种动物增加一个计数器。因此,红色为 1,蓝色为 2,粉色为 3。接下来,狗、猫、鸟和马将是 1、2、3 和 4。我需要仓鼠再次从 1 开始,因为我们要开始一种新颜色。

如果我对所述文件执行“同时读取颜色动物”,当颜色不再等于以前的颜色时,我可以做什么来比较?

我正在寻找这样的东西:

1.1  
1.2  
1.3  
1.4  
2.1  
2.2  
2.3  
3.1  
3.2  
3.3  
3.4  

任何建议将不胜感激 :)

答案1

像这样的东西awk

$ awk '$1 != c { cc++; c=$1; ac=0; a="" } $2 != a { ac++; a=$2 } { printf("%d.%d\n", cc, ac) }' file
1.1
1.2
1.3
1.4
2.1
2.2
2.3
3.1
3.2
3.3
3.4

awk脚本跟踪四件事:

  1. 最近读过的动物名称,a
  2. 最近读取的颜色,c
  3. “动物计数器”,ac
  4. “颜色计数器”,cc

它根据两列输入中的内容更新这些变量。

  • 如果颜色与最近读取的颜色不同,则增加cc并记住颜色代替。还重置aca
  • 如果动物与最近读到的不同,则增加ac并记住动物代替。

然后为每行输入打印cc和。ac

如果保证每一行上的动物都是唯一的,则可以消除该a变量。

答案2

perl -pale '$_ = join ".", reverse ++$h{$F[0]}, scalar keys %h'

哈希%h保存keyA => countscalar keys %h返回任意时间点的键数。然后我们反转结果并用逗号将它们连接起来。

结果

1.1
1.2
1.3
1.4
2.1
2.2
2.3
3.1
3.2
3.3
3.4

相关内容