アニメ『風夏』
真面目な恋愛ものですね。漫画の方を一切読んだことがないので展開楽しみです。1話目は、風夏との劇的な、いやそうでもないような出会いがあって、スターになってしまった幼馴染?が登場して、ぐらいのストーリーでしたが、それでも面白かったです。何か伝わってくるものがありました。きっと最後まで見れば感動できると思いますので視聴決定です。
私の中で最高の恋愛ストーリーといえば、「ロミオとジュリエット」です。現世で結ばれなくても魂がつながっている恋愛が素敵ですね。
さて今回はfmtコマンドを使います。
fmtを適用するテキストには、英文の「ロミオとジュリエット」を使います。ではcatしてみます。
takk@deb83:~$ cat -n romeojuliet 1 JULIET 2 O Romeo, Romeo! wherefore art thou Romeo? 3 Deny thy father and refuse thy name; 4 Or, if thou wilt not, be but sworn my love, 5 And I'll no longer be a Capulet. 6 7 ROMEO 8 [Aside] Shall I hear more, or shall I speak at this? 9 10 JULIET 11 'Tis but thy name that is my enemy; 12 Thou art thyself, though not a Montague. 13 What's Montague? it is nor hand, nor foot, 14 Nor arm, nor face, nor any other part 15 Belonging to a man. O, be some other name! 16 What's in a name? that which we call a rose 17 By any other name would smell as sweet; 18 So Romeo would, were he not Romeo call'd, 19 Retain that dear perfection which he owes 20 Without that title. Romeo, doff thy name, 21 And for that name which is no part of thee 22 Take all myself. takk@deb83:~$
(シェークスピア「ロミオとジュリエット」より)
このテキストファイルromeojulietをfmtコマンドを使って整形してみましょう。
オプションなしの場合は、75文字以下で各行が改行されます。
takk@deb83:~$ fmt romeojuliet JULIET O Romeo, Romeo! wherefore art thou Romeo? Deny thy father and refuse thy name; Or, if thou wilt not, be but sworn my love, And I'll no longer be a Capulet. ROMEO [Aside] Shall I hear more, or shall I speak at this? JULIET 'Tis but thy name that is my enemy; Thou art thyself, though not a Montague. What's Montague? it is nor hand, nor foot, Nor arm, nor face, nor any other part Belonging to a man. O, be some other name! What's in a name? that which we call a rose By any other name would smell as sweet; So Romeo would, were he not Romeo call'd, Retain that dear perfection which he owes Without that title. Romeo, doff thy name, And for that name which is no part of thee Take all myself. takk@deb83:~$
元ファイルは最大行幅が52文字でしたが、fmtコマンドにより、72文字に拡張されてテキストが生成されたことになります。
takk@deb83:~$ wc -L <romeojuliet 52 takk@deb83:~$ fmt romeojuliet | wc -L 72 takk@deb83:~$ fmt -75 romeojuliet | wc -L 72 takk@deb83:~$
fmtコマンドに-1を指定すると、先頭の空白を除き、空白が改行に置換できます。
takk@deb83:~$ fmt -1 romeojuliet (省略) O Romeo, Romeo! wherefore art thou Romeo? (省略)
つまりfmtコマンドは、空白と改行のコントロールができるということです。
文章以外で使ってみましょう。
takk@deb83:~$ seq 10 | fmt 1 2 3 4 5 6 7 8 9 10 takk@deb83:~$
本来改行されて縦に数列が並ぶseqコマンドですが、fmtの効果により空白となり横に並んでいます。
次の例です。
takk@deb83:~$ seq 100 | split -dl20 takk@deb83:~$ ls x* x00 x01 x02 x03 x04 takk@deb83:~$ fmt -2222 x* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 takk@deb83:~$
fmtコマンドで指定可能な文字数が2500ですので、入力しやすくて覚えやすい2222で指定しています。
仕事でよく使うテクニックとしては、メモリダンプの結果等で、あるアドレスのみ行幅を変えたい場合に以下のように使います。
takk@deb83:~$ seq 128 | perl -ne 'print chr' | od -tx1 -Ax | fmt -p000050 -w20 000000 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 000010 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 000020 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 000030 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 000040 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 000050 51 52 53 54 000050 55 56 57 58 000050 59 5a 5b 5c 000050 5d 5e 5f 60 000060 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 000070 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 000080 takk@deb83:~$
コメント