使用perl重复固定编号的行。时代

时间:2019-03-15 06:31:21

标签: shell perl scripting

我有一个文件,我想重复一些固定编号。两次,然后在第二行之后添加一个循环命令,并在第二行结束后结束循环。 所以我的文件是

a4 b2 c3 e6
a1 b2 c3 d4
g5 h6 i7 j8
h9 i10 j11 k12

这应该变成

a4 b2 c3 e6
a1 b2 c3 d4
a1 b2 c3 d4
a1 b2 c3 d4
loop
g5 h6 i7 j8
endloop
h9 i10 j11 k12

我必须对16个文件执行此操作。我正在尝试使用sed命令,但它不起作用。我在想它如何使用perl进行操作吗?

我试图使用perl -ne'print $ _ x 3'文件,但是它可以对文件中存在的所有行进行操作。

池上建议的

/ 编辑 /

2 个答案:

答案 0 :(得分:1)

perl -wpe'if ($.==2) { $_ x= 3 } elsif ($.==3) { $_ = "loop\n${_}endloop\n" }' <infile >outfile

或更改多个文件:

perl -i -wpe'close ARGV if eof; if ($.==2) { $_ x= 3 } elsif ($.==3) { $_ = "loop\n${_}endloop\n" }' file1 file2 file3 

(关闭必须重新启动$.的行数)

答案 1 :(得分:0)

尝试这段代码。它可以解决您的问题:

for (my $i = 0; <>; $i++) {
        print;
        if ($i == 1) {
                print;
                print;
                print "loop\n";
        } elsif ($i == 2) {
                print "endloop\n";
        }       
}