2012-11-23 125 views
0
$ seq 12 | awk '{ if(NR%2) { print $0, (NR+1)/2 } else { print $0, NR/2} }' 
1 1 
2 1 
3 2 
4 2 
5 3 
6 3 
7 4 
8 4 
9 5 
10 5 
11 6 
12 6 

如何更改上面的命令?我想打印:如何改進這個例子?

1 1 
2 1 
3 1 
4 2 
5 2 
6 2 
7 3 
8 3 
9 3 
10 4 
11 4 
12 4 

回答

2

嗯。只需將你的算法,以3:

seq 12|awk '{if((NR%3)==1) { print $0, (NR+2)/3 } else if ((NR%3)==2) { print $0, (NR+1)/3 } else { print $0, NR/3} }' 

但我敢肯定有一個更短的算法中...

+0

時間越短,例如:序列12 | awk的「{打印$ 0,(( NR-1)+ 3-(NR-1)%3)/ 3} ' – pbhd

+0

或者,廣義:SEQ 12 | AWK' BEGIN {S = 3}; {打印$ 0,((NR-1)+ S-( NR-1)%s)/ s}'改變爲你喜歡的任何步長。 – pbhd

+0

謝謝你的好解決方案。我喜歡這個簡短的例子。 – Tedee12345

2
awk '{print $0, int((NR+2)/3)}' 
+0

謝謝你的好解決方案。 – Tedee12345