如何组合奇数和偶数行?

时间:2011-10-20 20:07:17

标签: perl bash sed awk

我想将每个偶数行与其上方的行组合。类似的东西:

Line one,csv,csv,csv
Line two,csv,csv
Line three,csv,csv,csv,csv
Line four,csv

结果应如下所示:

Line one,csv,csv,csv,Line two,csv,csv
Line three,csv,csv,csv,csv,Line four,csv

任何想法如何在Perl或sed / awk中实现?

7 个答案:

答案 0 :(得分:11)

这里是sed:

sed '$!N;s/\n/,/'

和awk:

awk '{if (e) {print p","$0;} else {p=$0;} e=!e;}'

awk 'NR%2==0 {print p","$0;} NR%2 {p=$0;}'

答案 1 :(得分:5)

这是paste命令的用途:

process_to_produce_output | paste -d, - -

示例:

$ paste -d, - - <<END
> Line one,csv,csv,csv
> Line two,csv,csv
> Line three,csv,csv,csv,csv
> Line four,csv
> END
Line one,csv,csv,csv,Line two,csv,csv
Line three,csv,csv,csv,csv,Line four,csv

答案 2 :(得分:2)

Perl的内置变量$.会告诉你行号。如果$. % 2为奇数,则1$.,否则为0。这是一个独立的例子;

#!/usr/bin/perl

use strict; use warnings;

my $buffer;

while (my $line = <DATA>) {
    if ($. % 2) {
        chomp $line;
        $buffer = $line;
    }
    else {
        print join(",", $buffer, $line);
    }
}

__DATA__
Line one,csv,csv,csv
Line two,csv,csv
Line three,csv,csv,csv,csv
Line four,csv

输出:

C:\Temp> tt
Line one,csv,csv,csv,Line two,csv,csv
Line three,csv,csv,csv,csv,Line four,csv

答案 3 :(得分:2)

通常情况下,您需要在缓冲区中累积数据,直到您有足够的知识输出,然后输出数据。

my @buf;
while (<>) {
    chomp;
    if (!@buf) {
       push @buf, $_;
       next;
    }

    my $line1 = shift(@buf);
    my $line2 = $_;
    print("$line1,$line2\n");
}

但在这种情况下,存在一个更简单的解决方案,因为您的问题可以重述为:用逗号替换每一个换行符,从第一个开始。

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

答案 4 :(得分:1)

你不需要像perl / sed / awk那样的核武器来解决这个问题。 xargs就足够了。

xargs -d '\n' -n2

<强>测试

kent$  echo "Line one,csv,csv,csv
Line two,csv,csv
Line three,csv,csv,csv,csv
Line four,csv"|xargs -d '\n' -n2
Line one,csv,csv,csv Line two,csv,csv
Line three,csv,csv,csv,csv Line four,csv

答案 5 :(得分:1)

还有一个:

awk -F, ORS=NR%2\?FS:RS infile

你不需要引用?大多数 shell

答案 6 :(得分:1)

一个稍微简单的Perl解决方案。

#!/usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
  chomp;
  print "$_," . <DATA>;
}

__DATA__
Line one,csv,csv,csv
Line two,csv,csv
Line three,csv,csv,csv,csv
Line four,csv
相关问题