我想在sed中字符串末尾的最后一个值中添加一个。
我正在思考cat 0809_data.csv |sed -e 's/\([0-9]\{6\}\).*\(,[^,]*$\)/\1\2/g'| export YEARS = $(echo `grep -o '[^,]*$' + 1`|bc)
e.g。 123456,kjhsflk,lksjgrlks,2.8 - > 123456,3.8
在awk中这会更合理/可行吗?
答案 0 :(得分:2)
这应该有效:
years=$(awk -F, 'BEGIN{ OFS=", "} {print $1, $4+1}' 0809_data.csv)
尝试使用sed
并对部分结果进行算术会非常尴尬。你必须将字符串拉开并进行数学运算并将所有内容重新组合在一起。 AWK可以毫不费力地做到这一点。
请注意,cat
不是必需的(即使在与您的问题中的命令类似的命令中使用sed
),除非您调用另一个脚本并且需要,否则可能不需要导出变量它能够作为“全局”变量访问它。此外,shell通常会进行整数数学运算,因此除非需要浮点数,否则不需要使用bc
。