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所在行进行相应字段内容替换。
这里我主要是通过循环和判断实现,我想知道是否有更简单的操作。请详细说明。
说的好的话,另有加分。 展开
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所在行进行相应字段内容替换。
这里我主要是通过循环和判断实现,我想知道是否有更简单的操作。请详细说明。
说的好的话,另有加分。 展开
3个回答
展开全部
#!/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做的那样.如果想做成交互式的还要在加些东西.
#这里的两个变量一个是学号,一个是数据文件
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做的那样.如果想做成交互式的还要在加些东西.
展开全部
你的目的是查询学号是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来实现估计够呛
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来实现估计够呛
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询