#!/bin/bash

awk -F ":" '
    {
        arr[$1] = (arr[$1] "\n" $2)
    }
    END{
        for(i in arr) {
            printf "["i"]"
            print arr[i]
        }
    }
' nowcoder.txt

# 第 1 行: 111:13443
# arr["111"] 之前的值为空  ""
# 解析步骤:  arr["111"] = ("" "\n" $2)   arr["111"] = ("" "\n" "13443")    arr["111"] = "\n13443"

# 第 2 行: 222:13211
# arr["222"] 之前的值为空
# 解析步骤:  arr["222"] = ("" "\n" $2)   arr["222"] = ("" "\n" "13211")    arr["222"] = "\n13211"

# 第 3 行: 111:13643
# arr["111"] 之前的值为 "\n13443"
# 解析步骤:  arr["111"] = ("\n13443" "\n" $2)   arr["111"] = ("\n13443" "\n" "13643")    arr["111"] = "\n13443\n13643"

# 第 4 行: 333:12341
# arr["333"] 之前的值为空
# 解析步骤:  arr["333"] = ("" "\n" $2)   arr["333"] = ("" "\n" "12341")    arr["333"] = "\n12341"

# 第 5 行: 222:12123
# arr[222] 之前的值为 "\n13211"
# 解析步骤:  arr["222"] = ("\n13211" "\n" $2)   arr["222"] = ("\n13211" "\n" "12123")    arr["222"] = "\n13211\n12123"


# 总结
# arr["111"] = "\n13443\n13643"
# arr["222"] = "\n13211\n12123"
# arr["333"] = "\n12341"

思路:使用Associative Arrays(关联数组)

相关书籍:The Linux Command Line 2nd (2019) 第 35 章 ARRAYS

END