我有以下格式的数据:
Pin|add
jtyjg
Kolk|aaa||
Kawr|wht u
Disnce
Djhdb|bbb||
我想将其转换为以下格式:
Pin|add jtyjg Kolk|aaa||
Kawr|wht u Disnce Djhdb|bbb||
我该怎么做?
答案 0 :(得分:5)
目前还不是很清楚你想要什么。不过,这个单行应该是你的榜样:
tr -d '\n' < oldfile | sed 's/||/||\n/g' > newfile
根据您的系统,您可能需要使用文字换行符进行sed替换,如下所示:
tr -d '\n' < oldfile | sed 's/||/||\<RETURN>/g' > newfile
答案 1 :(得分:2)
试试这个..
<强> INPUT.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
<强> Output.txt的强>
Pin|add jtyjg Kolk|aaa||
awr|wht u Disnce Djhdb|bbb||
答案 2 :(得分: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...
答案 3 :(得分: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||
这似乎是正确的。