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还想将这两条线与|