2

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

4

1 回答 1

2

这应该有效:

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

尝试对sed部分结果进行算术运算真的很尴尬。您必须将绳子拉开并进行数学运算,然后将所有内容重新组合在一起。AWK 巧妙地做到了这一点,没有任何大惊小怪。

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

于 2010-05-31T16:01:37.930 回答