我有一些格式如下的数据:
Pin|add
jtyjg
Kolk|aaa||
Kawr|wht u
Disnce
Djhdb|bbb||
我想将其转换为以下格式:
Pin|add jtyjg Kolk|aaa||
Kawr|wht u Disnce Djhdb|bbb||
我怎样才能做到这一点?
我有一些格式如下的数据:
Pin|add
jtyjg
Kolk|aaa||
Kawr|wht u
Disnce
Djhdb|bbb||
我想将其转换为以下格式:
Pin|add jtyjg Kolk|aaa||
Kawr|wht u Disnce Djhdb|bbb||
我怎样才能做到这一点?
目前还不太清楚你想要什么。不过,这个单线应该适用于您的示例:
tr -d '\n' < oldfile | sed 's/||/||\n/g' > newfile
根据您的系统,您可能需要使用文字换行符进行 sed 替换,如下所示:
tr -d '\n' < oldfile | sed 's/||/||\<RETURN>/g' > newfile
试试这个..
输入.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||
我假设原始文件在行尾字符之前没有空格......
这是相当基本的 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...
从表面上看,您希望将三组输入行组合成一个,用空格代替原始换行符。鉴于问题不限制工具集,那么 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||
这似乎是正确的。