linux shell编程中文件内容修改方法

我建立一个文件cj.db,用于记录学生成绩信息,共五个字段:姓名(不能有数字)、学号(这个字段具有唯一性)、语文、数学、外语,文件内容格式如下:jack:S1001:80... 我建立一个文件cj.db,用于记录学生成绩信息,共五个字段:姓名(不能有数字)、学号(这个字段具有唯一性)、语文、数学、外语,文件内容格式如下:
jack:S1001:80:99:100
jone:S1002:89:99:100
suse:S1003:89:87:98
依次类推。
我现在想通过shell script来读取这个文件,并修改文件中某个字段内容。比如,我通过查询“学号”字段的内容来确定学生的身份,然后可以选择修改学生的信息(其他字段)。

例如,通过查询学号是S1002这个学生,修改其数学成绩。

因为本人没有学过编程,也不具备优秀的编程思想,现在有个问题很困扰。应该用哪些语句才可以比较好的实现我上面的需求呢?
我现在想问的是,是否可以使用命令来直接修改这个文件中学号是S1002的其他字段信息,该如何实现?

我现在实现的方法比较繁琐,具体方法如下:
(1)查询S1002这个学号所在行是否存在,如果存在则输出S1002所在行的行号,通过awk命令实现。
(2)使用sed命令对文件cj.db中的S1002所在行进行相应字段内容替换。
这里我主要是通过循环和判断实现,我想知道是否有更简单的操作。请详细说明。
说的好的话,另有加分。
展开
 我来答 举报
kokkokkko
推荐于2016-04-15 · 超过20用户采纳过TA的回答
知道答主
回答量:71
采纳率:100%
帮助的人:29.6万
展开全部
#!/usr/bin/ksh

#这里的两个变量一个是学号,一个是数据文件
serial="S1002"
dbfile="cj.db"

#显示行号和该行的信息
showMessage()
{
sed -n "/${serial}/{=;p;}" ${dbfile}
}
#设置数学成绩
setMath()
{
sed "/${serial}/s/:[^:]\{1,\}/:$1/3" ${dbfile}
}

#设置语文成绩
setChinese()
{
sed "/${serial}/s/:[^:]\{1,\}/:$1/2" ${dbfile}
}
#设置外语成绩
setLanguage()
{
sed "/${serial}/s/:[^:]\{1,\}/:$1/4" ${dbfile}
}

#test
showMessage
setMath 23
setChinese 56
setLanguage 78

//
这个只是打印在屏幕上,如果想写入文件,还要重定向到一个临时文件,然后把这个文件改名.就像nxswxxg做的那样.如果想做成交互式的还要在加些东西.
nxswxxg
2010-05-13 · TA获得超过325个赞
知道小有建树答主
回答量:295
采纳率:0%
帮助的人:214万
展开全部
你的目的是查询学号是S1002这个学生,修改其数学成绩
awk -F":" 'BEGIN{OFS=FS}$2=="S1002"{$4=100}1,'cj.db
这个就是将学号是S1002的数学成绩改成100,并列出
你要保存需要重定向到其他文件
awk -F":" 'BEGIN{OFS=FS}$2=="S1002"{$4=100}1,'cj.db > cj.db.tmp
rm -rf cj.db
mv cj.db.tmp cj.db

我感觉你这里要是用sed来实现估计够呛
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
terrychoi456
2010-05-13
知道答主
回答量:16
采纳率:0%
帮助的人:0
展开全部
swd
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式