在一定数量的列之后的换行符

时间:2015-06-18 20:07:46

标签: python bash awk sed

我希望在一行中打印出一定数量的列后,将列写在一行中。原始文件的格式为

A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
A3 B3 C3 D3 E3
...

如果我选择3,则输出应如下:

A1 B1 C1
D1
E1
A2 B2 C2
D2
E2
A3 B3 C3
...

或者如果我选择2:

A1 B1 
C1
D1
E1
A2 B2 
C2
D2
E2
A3 B3 
C3
...

我感谢任何解决方案; awk,sed或bash是首选。我对python开放......

3 个答案:

答案 0 :(得分:2)

使用GNU sed

$ cat file
A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
A3 B3 C3 D3 E3

$sed 's/ /\n/3g' file
A1 B1 C1
D1
E1
A2 B2 C2
D2
E2
A3 B3 C3
D3
E3

$ gsed 's/ /\n/2g' file
A1 B1
C1
D1
E1
A2 B2
C2
D2
E2
A3 B3
C3
D3
E3

答案 1 :(得分:0)

$ awk -v n=4 '{l=""; sep=""; for(i=1;i<=n;i++) {l=l sep $i; sep=FS}; print l; for(i=n+1;i<=NF;i++) print $i}' cols
A1 B1 C1 D1
E1
A2 B2 C2 D2
E2
A3 B3 C3 D3
E3

连接前n个元素并打印;然后每行打印剩余的一行

答案 2 :(得分:0)

这个怎么样?

<强>输入

$ cat file
A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
A3 B3 C3 D3 E3
当n = 3时

$ awk '{for(i=1;i<=NF;i++)if(i>n)sub(/^/,"\n",$i)}1' n=3 file
A1 B1 C1 
D1 
E1
A2 B2 C2 
D2 
E2
A3 B3 C3 
D3 
E3

当n = 2

$ awk '{for(i=1;i<=NF;i++)if(i>n)sub(/^/,"\n",$i)}1' n=2 file
A1 B1 
C1 
D1 
E1
A2 B2 
C2 
D2 
E2
A3 B3 
C3 
D3 
E3

当n = 4

$ awk '{for(i=1;i<=NF;i++)if(i>n)sub(/^/,"\n",$i)}1' n=4 file
A1 B1 C1 D1 
E1
A2 B2 C2 D2 
E2
A3 B3 C3 D3 
E3