一行使用sed和bc?

时间:2010-05-31 15:14:34

标签: sed awk bc

我想在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中这会更合理/可行吗?

1 个答案:

答案 0 :(得分:2)

这应该有效:

years=$(awk -F, 'BEGIN{ OFS=", "} {print $1, $4+1}' 0809_data.csv)

尝试使用sed并对部分结果进行算术会非常尴尬。你必须将字符串拉开并进行数学运算并将所有内容重新组合在一起。 AWK可以毫不费力地做到这一点。

请注意,cat不是必需的(即使在与您的问题中的命令类似的命令中使用sed),除非您调用另一个脚本并且需要,否则可能不需要导出变量它能够作为“全局”变量访问它。此外,shell通常会进行整数数学运算,因此除非需要浮点数,否则不需要使用bc