用awk替换字符串特定列

时间:2014-09-26 01:35:49

标签: bash shell awk


我正在写一个脚本来修改csv文件。 这是我的格式文件:

  

" ID""类型""日期""松开""版本"
  " 1","安全更新"," 2014-09-23"," 1.3-0.1"," 2&# 34;
  " 2"," Bug修复"," 2014-09-23"," 1.3-0.1"," 2&# 34;
  #&34; 3""增强"" 2014年9月23日"" 1.3-0.1"" 2&#34 ;

我想更改"安全更新"到"高" ," Bug Fix" to" Medium"和#34;增强"到"正常"

有没有人给我一个想法?
感谢

3 个答案:

答案 0 :(得分:0)

这将在整个文件中用所需的替换替换关键字的每个实例。

awk '{gsub(/Security Update/,"High")}; 1'
awk '{gsub(/Bug Fix/,"Medium")}; 1'
awk '{gsub(/Enhancement/,"Normal")}; 1'

但请注意,即使关键字不在第二列中,也会匹配关键字。

答案 1 :(得分:0)

鉴于此示例文件:

"id","type","date","release","version"
"1","Security Update","2014-09-23","1.3-0.1","2"
"2","Bug Fix","2014-09-23","1.3-0.1","2"
"3","Enhancement","2014-09-23","1.3-0.1","2"

使用Python进行更改非常容易:

$ python -c '
import csv, fileinput
update={"Security Update": "High", "Bug Fix": "Medium", "Enhancement":"Normal"}
for line in csv.reader(fileinput.input()):
    if line[1] in update: line[1]=update[line[1]]
    print ",".join(repr(e) for e in line)' file.csv 
'id','type','date','release','version'
'1','High','2014-09-23','1.3-0.1','2'
'2','Medium','2014-09-23','1.3-0.1','2'
'3','Normal','2014-09-23','1.3-0.1','2'

答案 2 :(得分:0)

你可以用sed做到这一点。

sed 's/Security Update/High/g;s/Bug Fix/Medium/g;s/Enhancement/Normal/g'
相关问题