我的第一行文件a.txt包含以下内容,字段由(,)
分隔ab,b1,c,d,5.986627e738,e,5.986627e738
cd,g2,h,i,7.3423542344,j,7.3423542344
ef,l3,m,n,9.3124234323,o,9.3124234323
当我发出以下命令时
awk -F"," 'NR>-1{OFS=",";gsub($5,$5+10);OFS=",";print }' a.txt
正在打印
ab,b1,c,d,inf,e,inf
cd,g2,h,i,17.3424,j,17.3424
ef,l3,m,n,19.3124,o,19.3124
这里我有两个问题
我要求awk将10添加到第5列,但由于重复的条目,它已添加到第7列
这是对数字进行四舍五入,相反,我需要小数才能打印
我该如何解决这个问题?
答案 0 :(得分:1)
awk 'BEGIN {FS=OFS=","}{$5=sprintf("%.10f", $5+10)}7' file
e
,因此在输出中变为10.0000 .... gsub
替换,因此所有匹配项都将被替换。用gawk测试
printf
格式:kent$ cat f
ab,b1,c,d,5.9866,e,5.986627e738
cd,g2,h,i,7.34235,j,7.3423542344
ef,l3,m,n,9.312423,o,9.3124234323
kent$ awk 'BEGIN {FS=OFS=","}{split($5,p,".");$5=sprintf("%.*f",length(p[2]), $5+10)}7' f
ab,b1,c,d,15.9866,e,5.986627e738
cd,g2,h,i,17.34235,j,7.3423542344
ef,l3,m,n,19.312423,o,9.3124234323
答案 1 :(得分:0)
你所做的就是替换整个记录,你真正想做的是
awk 'BEGIN {FS=OFS=","}
{$5+=10}1' a.txt