1

有没有办法在 awk (或类似的东西)中为给定文件构造一个过滤器,比如:

0.99,0.98,1.1,0.85,0.92
0.76,1.4,0.99,0.99,0.82
1.0,1.45,0.78,0.91,0.95

会用 1.0 替换行中大于 1.0 的任何记录吗?

4

2 回答 2

10

这是你可以做的事情awk

awk -F, '{for(i=1;i<=NF;i++) if($i>1) {$i="replacement"}}1' OFS=, file

测试:

$ cat file
0.99,0.98,1.1,0.85,0.92
0.76,1.4,0.99,0.99,0.82
1.0,1.45,0.78,0.91,0.95

$ awk -F, '{for(i=1;i<=NF;i++) if($i>1) {$i="replacement"}}1' OFS=, file
0.99,0.98,replacement,0.85,0.92
0.76,replacement,0.99,0.99,0.82
1.0,replacement,0.78,0.91,0.95
于 2013-06-11T19:06:15.240 回答
4

这是一个sed解决方案:

sed -e 's/[1-9][0-9]*\.[0-9]*/1.0/g' in-file > out-file

该模式[1-9][0-9]*\.[0-9]*仅匹配以大于 的数字开头0、后跟零个或多个数字、后跟小数点、后跟其他数字的任何序列。如果您想要就地替换,您可以使用以下-i选项:

sed -i -e 's/[1-9][0-9]*\.[0-9]*/1.0/g' in-file
于 2013-06-11T19:09:34.873 回答