我有几个大的csv文件,其中我想替换少于100的所有数字,包括500或其他正数的负数。
我不是程序员,但我找到了一个很好的perl one liner,用逗号's/[^\S\n]+/,/g'
替换空格。我想知道是否有任何简单的方法来做到这一点。
答案 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