通过使用Perl脚本就地添加和删除列来修改文件

时间:2016-05-02 18:03:53

标签: regex perl

我正在编写一个Perl脚本,我知道要删除哪些列以及需要添加哪些列。 e,g我有一个名为deleteColumn的数组,其中包含要删除的数字列。类似地,我有一个名为AddColumn的数组,其中包含有关需要插入某些内容的位置的信息。

作为输入,我有一行,其中列以逗号(,)分隔。例如:

1,2,3,5,9,7,8,12

现在数组deleteColumn中的值是[4,7],这意味着我必须这样做 删除元素9和12.数组AddColumn中的值是[3,5] 这些addColumn表示空加,即','。所以删除后 并且最后输出应该如下:

1,2,3,,5,,7,8.

我如何实现内联,因为我需要阅读GB的内容 文件(组合大小)并对它们进行操作。这可以内联吗?

我正在逐行阅读文件。

1 个答案:

答案 0 :(得分:2)

删除列时,要添加的列的索引可能会更改。因此,在开头标准化索引:按降序对它们进行数字排序,并减少每个索引,以便按照它所遵循的删除列数添加。

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my @delete = (4, 7);
my @add    = (3, 5);

# Normalize the arrays.
@delete = sort { $b <=> $a } @delete;
@add    = sort { $b <=> $a } @add;
for my $i (@delete) {
    $_ > $i && --$_ for @add;
}

while (my $line = <>) {
    chomp $line;
    my @columns = split /,/, $line;
    splice @columns, $_, 1      for @delete;
    splice @columns, $_, 0, q() for @add;
    say join ',', @columns;
}