Scripting 用鉴别器连接多行

Scripting 用鉴别器连接多行,scripting,sed,awk,Scripting,Sed,Awk,我有这样的输入 输入: a,b,c d,e,f g,h,i k,l,m n,o,p q,r,s 我希望能够用一个鉴别器连接这些行,比如| 输出: a,b,c|d,e,f|g,h,i k,l,m|n,o.p|q,r,s 该文件有100万行,我希望能够像前面的示例那样连接行 关于如何处理这个问题有什么想法吗?呆呆地看着: BEGIN { state=0 } state==0 { line=$0 state=1 next } state==1 { line=line "|

我有这样的输入

输入:

a,b,c
d,e,f
g,h,i
k,l,m
n,o,p
q,r,s
我希望能够用一个鉴别器连接这些行,比如|

输出:

a,b,c|d,e,f|g,h,i 
k,l,m|n,o.p|q,r,s
该文件有100万行,我希望能够像前面的示例那样连接行

关于如何处理这个问题有什么想法吗?

呆呆地看着:

BEGIN {
  state=0
}

state==0 {
  line=$0
  state=1
  next
}

state==1 {
  line=line "|" $0
  state=2
  next
}

state==2 {
  print line "|" $0
  state=0
  next
}
目瞪口呆:


如果Perl还可以,您可以尝试:

$i = 1;
while(<>) {
        chomp;
        unless($i % 3)
        { print "$line\n"; $i = 1; $line = "";}
        $line .= "$_|";
        $i++;
}

如果Perl还可以,您可以尝试:

$i = 1;
while(<>) {
        chomp;
        unless($i % 3)
        { print "$line\n"; $i = 1; $line = "";}
        $line .= "$_|";
        $i++;
}

@OP,如果你想每3条记录对它们进行分组

$ awk 'ORS=(NR%3==0)?"\n":"|"' file
a,b,c|d,e,f|g,h,i
k,l,m|n,o,p|q,r,s
使用Perl

$ perl -lne 'print $_ if $\ = ($. % 3 == 0) ? "\n" : "|"' file
a,b,c|d,e,f|g,h,i
k,l,m|n,o,p|q,r,s

@OP,如果你想每3条记录对它们进行分组

$ awk 'ORS=(NR%3==0)?"\n":"|"' file
a,b,c|d,e,f|g,h,i
k,l,m|n,o,p|q,r,s
使用Perl

$ perl -lne 'print $_ if $\ = ($. % 3 == 0) ? "\n" : "|"' file
a,b,c|d,e,f|g,h,i
k,l,m|n,o,p|q,r,s
由于您的标记包含sed,因此这里有一种使用它的方法:

sed 'N;N;s/\n/|/g' datafile
由于您的标记包含sed,因此这里有一种使用它的方法:

sed 'N;N;s/\n/|/g' datafile

你想这样连成3人一组还是连成一条大线?你想这样连成3人一组还是连成一条大线?并不是说会发生这种情况,但如果OP的数据本身包含|呢?那么sed正则表达式就会一团糟。不是说它会发生,但是,如果OP的数据包含了它自己呢?那么sed正则表达式就会乱了。如果只有两行,会有问题吗?我不确定我能理解,但是如果你想让结果是每两行而不是三行合并成一行,那么你得到a,b,c | d,e,f,那么就用一个N,像这样:sed'N;s/\n/|/g'datafile@Dyno,如果OP希望每3行合并一次,并且他的文件中只有2行,则上述操作无效。如果OP仍然想把这两条线和|连在一起,如果只有两条线会有问题吗?我不确定我能理解,但是如果你想让结果是每两条线而不是三条线合并成一条,那么你得到a,b,c | d,e,f,然后用一个N,像这样:sed'N;s/\n/|/g'datafile@Dyno,如果OP希望每3行合并一次,并且他的文件中只有2行,则上述操作无效。如果OP还想将这两条线与|