2013-01-25 63 views

回答

4

用你的號碼替換下面的腳本中的5。

seq 20|xargs -n5| awk '{for (i=1;i<=NF;i++) a[i,NR]=$i; }END{ 
    for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++)printf a[i,j]" "; print "" }}' 

輸出:

1 6 11 16 
2 7 12 17 
3 8 13 18 
4 9 14 19 
5 10 15 20 

音符seq 20上面有隻是用於生成用於測試的數字序列。你真正的工作並不需要它。

EDIT

通過sudo_O指出的,我添加純AWK溶液:

awk -vn=5 '{a[NR]=$0}END{ x=1; while (x<=n){ for(i=x;i<=length(a);i+=n) printf a[i]" "; print ""; x++; } }' file 

測試

kent$ seq 20| awk -vn=5 '{a[NR]=$0}END{ x=1; while (x<=n){ for(i=x;i<=length(a);i+=n) printf a[i]" "; print ""; x++; } }'  
1 6 11 16 
2 7 12 17 
3 8 13 18 
4 9 14 19 
5 10 15 20 

kent$ seq 12| awk -vn=5 '{a[NR]=$0}END{ x=1; while (x<=n){ for(i=x;i<=length(a);i+=n) printf a[i]" "; print ""; x++; } }'  
1 6 11 
2 7 12 
3 8 
4 9 
5 10 
+0

作品,謝謝,接受。 – vektor

+0

此如果輸入文件長度不5. –

+0

@sudo_O THX的指點出來的多故障時,沒在這種情況下測試,現在純粹AWK單行加入。 – Kent

9

使用鮮爲人知寶石pr

$ seq 20 | pr -ts' ' --column 4 
1 6 11 16 
2 7 12 17 
3 8 13 18 
4 9 14 19 
5 10 15 20 
+0

你能解釋一下這個命令是如何工作的 – user2134226

+0

這只是一個寶石,如果它可以完成這項工作。例如,你應該用'seq 21'來測試它。如您所見,您需要進行一些後期處理才能獲得所需的輸出。否則,上面的命令將會失敗,不作任何修改。 – Steve

+0

@ user19340357:我不相信它達到了預期的效果。無論如何,當研究命令的工作方式時,您應該首先查看該命令的手冊頁。在這種情況下,鍵入:[man pr](http://linux.die.net/man/1/pr)以查看'pr'的手冊頁。鑑於在這種情況下只有三個選項傳遞給'pr',是否有一個沒有很好記錄的特殊標誌,您需要更多解釋? – Steve

2

這裏是我如何與awk做到這一點:

awk -v n=5 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] }' 

一些簡單的測試:

seq 21 | awk -v n=5 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] | "column -t" }' 

結果:

1 6 11 16 21 
2 7 12 17 
3 8 13 18 
4 9 14 19 
5 10 15 20 

而另:

seq 40 | awk -v n=6 '{ c++ } c>n { c=1 } { a[c] = (a[c] ? a[c] FS : "") $0 } END { for (i=1;i<=n;i++) print a[i] | "column -t" }' 

結果:

1 7 13 19 25 31 37 
2 8 14 20 26 32 38 
3 9 15 21 27 33 39 
4 10 16 22 28 34 40 
5 11 17 23 29 35 
6 12 18 24 30 36 
相關問題