我有一个基于文本的数据库文件,用于存储学生条目,如下所示:
SID:LNAME:FNAME:hw01:quiz01
004:dravid:rahul:78:100
002:ganguly:sourav:54:13
005:kohli:virat:48:43
001:kumble:anil::54
003:tendulkar:sachin:87:78
Run Code Online (Sandbox Code Playgroud)
用户输入他想要更新的标题和学生的sid/lname/fname.因此,例如,如果用户输入
sid = 001,hw01,得分= 19,我想要输出如下:
SID:LNAME:FNAME:hw01:quiz01
004:dravid:rahul:78:100
002:ganguly:sourav:54:13
005:kohli:virat:48:43
001:kumble:anil:19:54
003:tendulkar:sachin:87:78
Run Code Online (Sandbox Code Playgroud)
我意识到awk是最好的方法.知道怎么做吗?
谢谢.
你可以使用这个awk命令:
awk -v sid='001' -v hw01='19' 'BEGIN {FS=OFS=":"} $1 == sid { $4 = hw01 } 1' file
SID:LNAME:FNAME:hw01:quiz01
004:dravid:rahul:78:100
002:ganguly:sourav:54:13
005:kohli:virat:48:43
001:kumble:anil:19:54
003:tendulkar:sachin:87:78
Run Code Online (Sandbox Code Playgroud)
更新:根据下面的评论,此awk命令接受搜索和更新列名称和值.
awk -v skey='SID' -v sval='001' -v ukey='hw01' -v uval='19' 'BEGIN { FS=OFS=":" }
NR==1{for (i=1; i<=NF; i++) col[$i]=i} $col[skey]==sval{ $col[ukey]=uval } 1' file
SID:LNAME:FNAME:hw01:quiz01
004:dravid:rahul:78:100
002:ganguly:sourav:54:13
005:kohli:virat:48:43
001:kumble:anil:19:54
003:tendulkar:sachin:87:78
Run Code Online (Sandbox Code Playgroud)