1

我有一些格式如下的数据:

Pin|add
jtyjg
Kolk|aaa||
Kawr|wht u
Disnce
Djhdb|bbb||

我想将其转换为以下格式:

Pin|add jtyjg Kolk|aaa||
Kawr|wht u Disnce Djhdb|bbb||

我怎样才能做到这一点?

4

4 回答 4

5

目前还不太清楚你想要什么。不过,这个单线应该适用于您的示例:

tr -d '\n' < oldfile | sed 's/||/||\n/g' > newfile

根据您的系统,您可能需要使用文字换行符进行 sed 替换,如下所示:

tr -d '\n' < oldfile | sed 's/||/||\<RETURN>/g' > newfile
于 2012-08-10T22:16:53.310 回答
2

试试这个..

输入.txt

Pin|add
jtyjg
Kolk|aaa||
Kawr|wht u
Disnce
Djhdb|bbb||

代码

cat Input.txt | tr '\n' ' ' | sed 's/|| ./||~~/g' | tr '~~' '\n'| sed '/^$/d' > Output.txt

输出.txt

Pin|add jtyjg Kolk|aaa||
awr|wht u Disnce Djhdb|bbb||
于 2012-08-12T14:45:52.120 回答
2

我假设原始文件在行尾字符之前没有空格......

这是相当基本的 Perl,适用于 v5.8.9

#!/usr/bin/perl

open( IN, '<', 'text.txt' );    # the input file
open( OUT, '>', 'text2.txt' );  # the output file

while( <IN> ) {
        chomp;          # get rid of the end-of-line characters
        $out .= $_;     # add the current input to the output string
        if ( /\|\|/ ) { # does this contain the output signal characters "||"?
                print( OUT "$out\n" );  # output the built string
                $out = '';              # clear the output string
        }
        else {
                $out = $out . ' ';      # append a space to the end
        }
}
print( OUT $out );                      # output anything left over...
于 2012-08-13T17:11:11.983 回答
1

从表面上看,您希望将三组输入行组合成一个,用空格代替原始换行符。鉴于问题不限制工具集,那么 Perl 解决方案是适度合适的:

#!/usr/bin/env perl
use strict;
use warnings;

my($l1, $l2, $l3);
while (defined($l1 = <>) && defined($l2 = <>) && defined($l3 = <>))
{
    chomp($l1, $l2);
    print "$l1 $l2 $l3";
}

如果输入中的行数不是三的倍数,则省略多余的行。代码不会单独处理每个输入文件;它只是将它们结合在一起。对于给定的输入数据,输出为:

Pin|add jtyjg Kolk|aaa||
Kawr|wht u Disnce Djhdb|bbb||

这似乎是正确的。

于 2012-08-10T23:25:53.177 回答