用于规范化负数的Perl脚本

时间:2014-03-13 04:46:36

标签: perl

我有几个大的csv文件,其中我想替换少于100的所有数字,包括500或其他正数的负数。

我不是程序员,但我找到了一个很好的perl one liner,用逗号's/[^\S\n]+/,/g'替换空格。我想知道是否有任何简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

使用Windows格式化perl 1-liner

perl -F/,/ -lane "print join(q{,},map{/^[-\d.]+$/ && $_ < 100 ? 100: $_} @F),qq{\n};" input.csv > output.csv

答案 1 :(得分:0)

以下内容适用于我,假设目录中有2个文件:

test1.txt的:

201,400,-1
-2.5,677,90.66,30.32
222,18

的test2.txt

-1,-1,-1,99,101
3,3,222,190,-999
22,100,100,3

使用一个班轮:

perl -p -i.bak -e 's/(-?\d+\.?\d*)/$1<100?500:$1/ge' *

-p会将搜索替换流程应用于每个文件中的每一行,-i.bak表示在原始文件中进行替换,并使用扩展名为.bak的新文件备份这些文件。 s///ge部分将找到所有数字(包括负数),然后将每个数字与100进行比较,如果小于100,则将其替换为500. g表示查找所有匹配数字。 e表示替换部分将被视为Perl代码。 *表示处理目录中的所有文件

执行了这一个班轮后,我在目录中得到了4个文件:

test1.txt.bak test1.txt test2.txt.bak test2.txt

,test1.txt和test2.txt的内容为:

test1.txt的

201,400,500
500,677,500,500
222,500

的test2.txt

500,500,500,500,101
500,500,222,190,500
500,100,100,500