我希望在一行中打印出一定数量的列后,将列写在一行中。原始文件的格式为
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开放......
答案 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