Linux脚本练习之script079-处理文本

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script079-处理文本相关的知识,希望对你有一定的参考价值。

script079

题目

注:题目来源于 SHELL22 处理文本

假设我们有一个 nowcoder.txt,假设里面的内容如下:

111:13443
222:13211
111:13643
333:12341
222:12123

现在需要你写一个脚本按照以下的格式输出:

[111]
13443
13643
[222]
13211
12123
[333]
12341

脚本一

先获取到第一列的内容,并通过去重排序得到 [ ] 中的标题名,然后再通过这个标题名去文件中检索对应的行,然后提取第二列输出。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUmDFyOB-1657896998267)(image-script079/image-20220712213827690.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cl7I6CYw-1657896998269)(image-script079/image-20220712214016161.png)]

#!/bin/bash

result=$(cat nowcoder.txt | awk -F ":" 'print $1' | sort | uniq)
for item in $result ; do
    echo "[$item]"
    grep "$item" nowcoder.txt | awk -F ":" 'print $2'
done

脚本二

awk -F ":" '
	# 存储到关联数组中,键名是 `111`、`222`、`333`;键值是拼接的字符串,即 "13211 \\n 12123"
	# 这里的三元表达式是为了拼接多行字符串,中间通过换行符分隔
    res[$1] = (res[$1] == "" ? $2 : (res[$1] "\\n" $2))
END
	# 最后循环打印关联数组
    for(k in res)
    	# 输出键名
        print "["k"]"
        # 输出键名对应的键值
        print res[k]
    
' nowcoder.txt

以上是关于Linux脚本练习之script079-处理文本的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script075-域名进行计数排序处理

Linux脚本练习之script075-域名进行计数排序处理

Linux脚本练习之script064-去掉空行

Linux脚本练习之script059-统计文件的行数

Linux脚本练习之script063-打印空行的行号

Linux脚本练习之script065-打印字母数小于8的单词