我有一個包含以下內容的文件:
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.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
腳本跟踪四件事:
- 最近讀過的動物名稱,
a
。 - 最近讀取的顏色,
c
。 - “動物計數器”,
ac
。 - “顏色計數器”,
cc
。
它根據兩列輸入中的內容更新這些變數。
- 如果顏色與最近讀取的顏色不同,請增加
cc
並記住這顏色代替。也重置ac
和a
。 - 如果動物與最近讀到的不同,則增加
ac
並記住這動物代替。
然後為每行輸入列印cc
和。ac
如果保證每一行上的動物都是唯一的,則可以消除該a
變數。
答案2
perl -pale '$_ = join ".", reverse ++$h{$F[0]}, scalar keys %h'
哈希%h
保存keyA => count
並scalar keys %h
傳回任意時間點的鍵數。然後我們反轉結果並用逗號將它們連接起來。
結果
1.1
1.2
1.3
1.4
2.1
2.2
2.3
3.1
3.2
3.3
3.4