如何更换,以。在大文本文件中

时间:2015-05-12 09:17:33

标签: perl

我希望使用perl并编写一个程序,在大的制表符分隔文本文件(100000行)中查找纬度和经度值,并将lat长值中使用的值替换为a。 。该文件有多列。

即。我想把它改成。

51,2356至51.2356

有人能告诉我这是怎么做到的吗?

非常感谢,

2 个答案:

答案 0 :(得分:0)

你不需要一个"程序"为此,你真的用一个衬里做这样的事情。如果您想在整个文件中用psum :: [[Float]] -> [Float] psum (x1:x2:xs) = psum (binpsum x1 x2 : xs) where binpsum (x:xs) (y:ys) = x+y : binpsum xs ys binpsum [x] (y:ys) = x+y : ys binpsum (x:xs) [y] = x+y : xs psum [x] = x (点)替换文件中的所有 ,(逗号)(您的问题不会涉及原始文件格式的细节) )然后下面的诀窍:

.

在运行替换为perl -pi.bak -e 's/,/\./g;' your_file.txt之前,它还会备份您的文件。

答案 1 :(得分:0)

快速而肮脏的方式是用点替换所有逗号(如果这将满足您的要求)

while (<$fh>) {
   $_ =~ s/,/\./g 
}

但是,如果还有其他字段可能会受到影响,更好的解决方案是仅替换所需的列

假设您感兴趣的两个字段是制表符分隔文件的第一列和第二列,理想情况下应该匹配两个字段,然后用&#34; dot&#34;替换。

while (<$fh>) {
    if ($_ =~ /(\d+,\d+)\|(\d+,\d+)\|(.*)$/) {
      my ($a, $b, $c) = ($1, $2, $3);
      $a=~s/,/\./g;
      $b=~s/,/\./g;
      $_= $a."|".$b."|".$c;
    }
}

下面, $ a和$ b将匹配&#34;纬度和经度&#34;列。