前言
昨天是程序员节,参加了绿色联盟(GCC)组织的一场比赛:第三届全国高校绿色计算系列大赛-任务挑战组半决赛,我主要是做的OpenEuler的Shell编程,因为昨天一直在忙,所以博客拖到了现在。那就给大家拜个晚节,祝大家没有996,1024快乐!
截止到目前,题目还可以提交,大家可以注册账号去试一下!传送门
题目一:
题面
题解
拓展链接
题目二:
题面
题解
总结
题目一:
题面
题解
#!/bin/bash
#将答案补充完毕
#/********** Begin **********/#
sed -i 's/\([a-zA-Z]\+\)\([0-9]\+\)\([a-zA-Z]\+\)/\1,\2,\3/g' test.txt
cat test.txt
#/********** End **********/#
拓展链接
sed命令不会修改test.txt文件,只是将里面的值拿出来,经过处理之后打印在终端上。
其实shell命令都是我大一的时候学的了,现在都忘得差不多了,所以都是网上现学的,一般看几个博客,就会了。
你需要什么内容,就在博客里把你的需求和用到知识点放一块就行。
比如“shell for循环按行读入”,右边是sed命令的介绍:Sed命令详解&正则表达式
题目二:
题面
题解
#!/bin/bash
#将答案填写在下方空白区域
#/********** Begin **********/#
IFS=$'\n'
arrA=()
arrB=()
for line in $(cat b.txt)
do
arrB[${#arrB[*]}]=$( echo $line | grep -o '^\([a-zA-Z]\+\)' )
done
#echo "" > resB.txt
for temp in ${arrB[*]}
do
echo $temp >> resB.txt
done
for line in $(cat a.txt)
do
line=$( echo $line | rev | grep -o '^\([a-zA-Z]\+\)' | rev )
arrA[${#arrA[*]}]=$line
done
#echo "" > resA.txt
for temp in ${arrA[*]}
do
echo $temp >> resA.txt
done
awk 'NR==FNR{ a[$1]=$1 } NR>FNR{ if(a[$1] == ""){ print $1}}' resB.txt resA.txt
#/********** End **********/#
思路比较简单:建立两个数组arrA和arrB分别去存放a.txt每行的最后一个单词和b.txt每行的第一个单词 ,读是通过for循环。然后通过>>可以将数组的内容输出到文件resA和resB,最后通过awk去取resA和resB差集,就是本题结果。
还是甩链接自己去学吧,要锻炼这种搜索能力。
shell for循环:shell for循环 按行读入
shell 数组操作:shell 数组定义和获取元素
扫描二维码关注公众号,回复: 12013969 查看本文章awk得到差集:awk做差集-简书
总结
今天完成的还不错,一个多小时就完成了题目,剩下的时间疯狂优化MindSpore,把自己练成一个调参工程师!下面是比赛时候拍的图!全靠牛肉粒和饮料供能啊!