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