我有这种格式的文件:
2015;1;1;11;7;19805;"2";12892;12478;"0900";"0853";-7.00;17.00;"0910";"1712";11.00;"1723";-6.00;329.00;330.00;302.00;2475.00;
我希望删除第10,11,14,15和17列中的引号 然后将这列中的数字除以2400.因此,我不是900,而是期望0.375(= 900/2400)。
最终输出应采用以下格式:
2015;1;1;11;7;19805;"2";12892;12478;0.375;0.355;-7.00;17.00;0.379;0.713;11.00;0.718;-6.00;329.00;330.00;302.00;2475.00;
我想我知道如何删除引号,但我绝对会丢失其余的......或者在python等中更容易?你能帮帮我吗?
答案 0 :(得分:3)
以下是适合您情况的gnu awk脚本:
<强> rq.awk 强>
BEGIN { FS=OFS=";"
OFMT="%.6g" # change output decimal format
# setup the field that should change:
split("10 11 14 15 17", ndx, " ")
}
{ for( k in ndx) {
i=ndx[k]
gsub(/"/, "", $i)
$i=$i / 2400
}
# print all fields
print
}
运行它:awk -f rq.awk your_file
。
ndx
,ndx
并且对于ndx中的每个字段:
gsub
函数print
输出所有字段,包括修改后的字段答案 1 :(得分:1)
使用awk
来解决此问题的另一种方法:
awk -F";" 'BEGIN{OFS=";"}function GSUB(F){gsub(/"/,"",$F);$F=$F/2400} {GSUB(10);GSUB(11);GSUB(14);GSUB(15);GSUB(1);print $0}' infile
它定义了一个函数,用于将双引号替换为null,然后除以2400.然后我们只为每个字段调用它并打印记录。 BEGIN
语句将输出字段分隔符OFS
设置为分号;