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-域名进行计数排序处理