perl将每两行合并为一个文件中的一行

时间:2014-09-05 12:38:30

标签: perl

我有一个示例文本文件包含键值对的记录,但是第一行的第一个键是第二行的值,第三行的第二个键是第四行的值,

例如,在一个垂直线中的sample.conf

key1
value1
key2
value2
key3
value3
...
and so on 

我需要将其转换为

key1 = value1 
key2 = value2

or it may be 

key1    key2.........
value1  value2.....

请帮助我,我是perl的初学者,我真的很感激答案。

3 个答案:

答案 0 :(得分:5)

使用perl one liner;删除每个奇数行的换行符,并为每个偶数行添加=

perl -pe 'if ($. %2){ chomp }else{ s/^/ = / }' file

使用类似的方法,

perl -pe 'chomp; $_ .= " = ". <>' file

输出

key1 = value1
key2 = value2
key3 = value3

或使用脚本,

use strict;
use warnings;
use autodie;

open my $fh, "<", "file";
while (<$fh>) {
  if ($. %2){ chomp } else { s/^/ = / }
  print;
}

答案 1 :(得分:3)

use warnings;
use strict;

while (my $k = <DATA>) {

  chomp $k;
  my $v = <DATA>;

  print "$k = $v";

}

__DATA__
key1
value1
key2
value2
key3
value3

答案 2 :(得分:2)

使用perl one-liner:

perl -pe 's/\n/ = / if $. % 2' file

说明:

切换

  • -p:为输入文件中的每个“行”创建一个while(<>){...; print}循环。
  • -e:告诉perl在命令行上执行代码。

<强>代码

  • s/\n/ = /:用空格分隔的等号替换换行符......
  • if $. % 2:仅限于奇数行。

使用脚本:

use strict;
use warnings;
use autodie;

#open my $fh, '<', "file";  # To replace below line when not testing
my $fh = \*DATA;

while (<$fh>) {
    s/\n/ = / if $. % 2;
    print;
}

__DATA__
key1
value1
key2
value2
key3
value3

输出:

key1 = value1
key2 = value2
key3 = value3