2012-04-15 89 views
0

我有這樣的命令:AWK - 在循環中打印行?

$ awk 'BEGIN{c="1"; for(i=NF; i<9; i++) print c++, "_"}' 
1 _ 
2 _ 
3 _ 
4 _ 
5 _ 
6 _ 
7 _ 
8 _ 
9 _ 

我想這個命令打印結果:

1 _ _ _ _ _ _ _ _ _ 
2 _ _ _ _ _ _ _ _ _ 
3 _ _ _ _ _ _ _ _ _ 
4 _ _ _ _ _ _ _ _ _ 
5 _ _ _ _ _ _ _ _ _ 
6 _ _ _ _ _ _ _ _ _ 
7 _ _ _ _ _ _ _ _ _ 
8 _ _ _ _ _ _ _ _ _ 
9 _ _ _ _ _ _ _ _ _ 

回答

2
awk ' 
    BEGIN { 
    for (i=0; i<9; ++i) { 
     printf("%d",i+1); 
     for (j=0; j<9; ++j) { 
     printf(" _"); 
     } 
     printf("\n"); 
    } 
    } 
' 
+0

此命令的作用。感謝您的幫助。 – Tedee12345 2012-04-15 15:17:50

2

這與沃恩的答案,但如果這是很重要的可能會快一點。

awk 'BEGIN { str = ""; for (i = 1; i <= 9; i++) str = str" _"; 
      for (i = 1; i <= 9; i++) printf("%d%s\n", i, str) }' 
+0

謝謝你的另一個好的解決方案。 – Tedee12345 2012-04-15 17:35:40

1

爲什麼還要編寫代碼來生成一個小而簡單的文本?

您已經有了想要的輸出,因爲您已經輸入了它。只要使用那段文字即可。

下面的腳本直接從您的預期輸出導出:

cat <<EOF 
1 _ _ _ _ _ _ _ _ _ 
2 _ _ _ _ _ _ _ _ _ 
3 _ _ _ _ _ _ _ _ _ 
4 _ _ _ _ _ _ _ _ _ 
5 _ _ _ _ _ _ _ _ _ 
6 _ _ _ _ _ _ _ _ _ 
7 _ _ _ _ _ _ _ _ _ 
8 _ _ _ _ _ _ _ _ _ 
9 _ _ _ _ _ _ _ _ _ 
EOF 
+0

感謝您提出解決方案。 – Tedee12345 2012-04-16 05:49:29