awkのNFとNRを利用して九九表


『ロード・オブ・ザ・リング/王の帰還』(2003) 公開からもう10年以上もたっていますが、まだ見てません。ファンタジーが苦手ってわけじゃないんです。怖いんですよねぇ、モンスター(魔物?種族?)とかが。『モンスターズ・インク』とかに出てくるような怖くないモンスターならいいんですが、映画見ていて、背丈がちっちゃい奴でも、いちいち怖いです。ちなみに、私は実写版のホラー映画は一切見れませんが、アニメーションなら、ホラーでもモンスターが出てきても大丈夫です。絵なので。

ファンタジーに出てくるオークが九九が得意か分かりませんが、awkコマンドで九九表が楽に作れます。賢いです、awk。
では最初の最初、seqから。

九九は全部で要素が81個ありますね。なので、seq 81から始めます。

~$ seq 81
1
2
3
4
5
6
7
8
9
10
(省略)
81
~$ 

seqでは1から81が表示されるだけですが、次にprを使うだけで、グンと九九表に近づきます。

~$ seq 81 | pr -t9
1	10	19	28	37	46	55	64	73
2	11	20	29	38	47	56	65	74
3	12	21	30	39	48	57	66	75
4	13	22	31	40	49	58	67	76
5	14	23	32	41	50	59	68	77
6	15	24	33	42	51	60	69	78
7	16	25	34	43	52	61	70	79
8	17	26	35	44	53	62	71	80
9	18	27	36	45	54	63	72	81
~$ 

これをawkに食べさせます。NFは列数、NRは行数が入っていますので、それぞれをかけ合わせると九九の結果になります。
ただし、NF変数の値を変えてしまうと、print $0で変更した列数しか表示されなくなりますので、iという変数に格納してから使います。

~$ seq 81 | pr -t9 | awk '{for(i=NF;i>0;i--){$i=i*NR}print $0}'
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
~$ 

次は、スペースをタブに変換して見栄えを良くします。awkでOFS=”\t”を使います。

~$ seq 81 | pr -t9 | awk '{for(i=NF;i>0;i--){$i=i*NR}OFS="\t";print $0}'
1	2	3	4	5	6	7	8	9
2	4	6	8	10	12	14	16	18
3	6	9	12	15	18	21	24	27
4	8	12	16	20	24	28	32	36
5	10	15	20	25	30	35	40	45
6	12	18	24	30	36	42	48	54
7	14	21	28	35	42	49	56	63
8	16	24	32	40	48	56	64	72
9	18	27	36	45	54	63	72	81
~$ 

九九表の完成です。

おまけ。魔物は十字架でやっつけましょう。

~$ !! | tr '1-9' ' '
 	 	 	 	 	 	 	 	 
 	 	 	 	 0	  	  	  	  
 	 	 	  	  	  	  	  	  
 	 	  	  	 0	  	  	  	  
 	 0	  	 0	  	 0	  	 0	  
 	  	  	  	 0	  	  	  	  
 	  	  	  	  	  	  	  	  
 	  	  	  	 0	  	  	  	  
 	  	  	  	  	  	  	  	  
~$ 

One response to “awkのNFとNRを利用して九九表

  1. That’s really thiinnkg of the highest order

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA