shell题解 | 处理文本(awk)

处理文本

https://www.nowcoder.com/practice/908d030e676a4fac997a127bfe63da64

#!/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

全部评论
嵌套数组
点赞 回复 分享
发布于 03-22 15:57 广东

相关推荐

06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务