我有一个格式如下的文件。这是一个片段,原始行超过一百万。
事实 ABC / DEF / GH9j / etc .. 是一行的开头,“;”应该是该行的结尾。
此示例中 line01,line10& line13 很完美;但其他行分散在多行中:
line01: ABC abc_123 (。Y(B2b),. A(sel));
line02: DEF def_456 (。Z(n_2),. in(1b0),
line03:.tstin(sel),. tstmb(DD));
line04: GH9j 3_inst (。Q0(CC3),. Q1(Ee),
第05行:.Q2(p_2),. Q3(cin),
line06:.D0(AA),. D1(rdata [5]),
line07:.D2(gg),。D3(hp),
line08:.SE0(sel),. SE1(sel),
line09:.SE2(pqr),. SE3(AA),. CA(Bb));
第10行: BUF 4PQR (。Y(eE),. A(cC));
第11行: MX2 MnOp (。X(DD),. A(PQR_11),
第12行:.B(trstb),. S0(klm2));
第13行: BUFH 6th_inst (。Zz(AA),. A(B2B));
.......
问。我想重新排列下面的所有行: 一个实例的所有端口应该在一行中(13行应减少到6行)
line01: ABC abc_123 (。Y(B2b),. A(sel));
line02: DEF def_456 (。Z(n_2),. in(1b0),. tstin(sel),. tstmb(DD));
line03: GH9j 3_inst (。Q0(CC3),. Q1(Ee),. Q2(p_2),. Q3(cin),. D0(AA) ),.D1(rdata [5]),. D2(gg),. D3(hp),. SE0(sel),. SE1(sel),。SE2(pqr),. SE3(AA),. CK( Bb));
line04: BUF 4PQR (。Y(eE),. A(cC));
第05行: MX2 MnOp (。X(DD),. A(PQR_11),. B(trstb),. S0(klm2));
line06: BUFH 6th_inst (。Zz(AA),. A(B2B));
答案 0 :(得分:1)
一个班轮可能有效:perl -pe' chomp unless m/\;/' file.txt
- 虽然有数百万行可能需要调整。
这是作为剧本的一个班轮:
#!/usr/bin/env perl
while (<DATA>) {
chomp unless m/\;/ ;
print ;
}
__DATA__
ABC abc_123 ( .Y ( B2b ) , .A ( sel ) );
DEF def_456 ( .Z ( n_2 ) , .in ( 1b0 ) ,
.tstin ( sel ) , .tstmb ( DD ) );
GH9j 3_inst ( .Q0 ( CC3 ) , .Q1 ( Ee ) ,
.Q2 ( p_2 ) , .Q3 ( cin ) ,
.D0 ( AA ) , .D1 ( rdata[5] ) ,
.D2 ( gg ) , .D3 ( hp ) ,
.SE0 ( sel ) , .SE1 ( sel ) ,
.SE2 ( pqr ) , .SE3 ( AA ) , .CK ( Bb ) );
BUF 4PQR ( .Y ( eE ) , .A ( cC ) );
MX2 MnOp ( .X ( DD ) , .A ( PQR_11 ) ,
.B ( trstb ) , .S0 ( klm2 ) );
BUFH 6th_inst ( .Zz ( AA ) , .A ( B2B ) );
<强>输出:强>
ABC abc_123 ( .Y ( B2b ) , .A ( sel ) );
DEF def_456 ( .Z ( n_2 ) , .in ( 1b0 ) ,.tstin ( sel ) , .tstmb ( DD ) );
GH9j 3_inst ( .Q0 ( CC3 ) , .Q1 ( Ee ) ,.Q2 ( p_2 ) , .Q3 ( cin ) ,.D0 ( AA ) , .D1 ( rdata[5] ) ,.D2 ( gg ) , .D3 ( hp ) ,.SE0 ( sel ) , .SE1 ( sel ) ,.SE2 ( pqr ) , .SE3 ( AA ) , .CK ( Bb ) );
BUF 4PQR ( .Y ( eE ) , .A ( cC ) );
MX2 MnOp ( .X ( DD ) , .A ( PQR_11 ) ,.B ( trstb ) , .S0 ( klm2 ) );
BUFH 6th_inst ( .Zz ( AA ) , .A ( B2B ) );
如果您需要保留行号(line01:
),请在问题中添加相应的注释。
答案 1 :(得分:1)
这是一个sed解决方案:
sed -n 'H;/;/{s/.*//;x;s/\n//g;p;}' filename
答案 2 :(得分:1)
如果没有看到你的整个数据集,或者至少有大量的数据集,很难知道要匹配的模式,但是在你给出的例子中,似乎你要合并的行以a换行结束简单地改变,换行,可能会做到这一点:
sed -e ':begin;$!N;s/,\n/,/;tbegin;P;D' in.txt
输出:
ABC abc_123 ( .Y ( B2b) , .A ( sel));
DEF def_456 ( .Z ( n_2) , .in ( 1b0) ,.tstin ( sel) , .tstmb ( DD));
GH9j 3_inst ( .Q0 ( CC3) , .Q1 ( Ee) ,.Q2 ( p_2) , .Q3 ( cin) ,.D0 ( AA) , .D1 ( rdata [5]) ,.D2 ( gg) , .D3 ( hp) ,.SE0 ( sel) , .SE1 ( sel) ,.SE2 ( pqr) , .SE3 ( AA) , .CK ( Bb));
BUF 4PQR ( .Y ( eE) , .A ( cC));
MX2 MnOp ( .X ( DD) , .A ( PQR_11) ,.B ( trstb) , .S0 ( klm2));
BUFH 6th_inst ( .Zz ( AA) , .A ( B2B));
有关在sed中匹配换行符的详细信息,请参阅http://backreference.org/2009/12/23/how-to-match-newlines-in-sed/。
答案 3 :(得分:0)
AWK中的单行
awk '{printf "%s%s", $0, /;\s*$/ ? "\n" : " "}' filename
它使用分隔符输出每一行,该分隔符是换行符或空格,具体取决于在行尾是否找到;
。