文字列のNグラムをシェル芸で出す場合、色々とやり方があるようなので、念の為忘れないように残しておく。

前に「響け!ユーフォニアム」でNグラムを生成していた場合は、以下のようにsedでループさせる方法で行っていた。

echo 響け!ユーフォニアム|sed ':a;p;s/\(.\)\(.*\)/\2\1/;ba' | head
blacknon@BS-PUB-UBUNTU-01:~$ echo 響け!ユーフォニアム|sed ':a;p;s/\(.\)\(.*\)/\2\1/;ba' | head
響け!ユーフォニアム
け!ユーフォニアム響
!ユーフォニアム響け
ユーフォニアム響け!
ーフォニアム響け!ユ
フォニアム響け!ユー
ォニアム響け!ユーフ
ニアム響け!ユーフォ
アム響け!ユーフォニ
ム響け!ユーフォニア

あと最近見かけた方法としては、ebanさんのやってたnkf -fNを利用したやり方がとてもシンプル。 nkfでは、-fNでNバイトで改行を無視してくれるようで、それを利用することでかなりシンプルに書けるようだ。流石だ…。

yes 高須クリニック | nkf -f16 | head -7 | sed 's/.$//g'
blacknon@BS-PUB-UBUNTU-01:~$ yes 高須クリニック | nkf -f16 | head -7 | sed 's/.$//g'
高須クリニック
須クリニック高
クリニック高須
リニック高須ク
ニック高須クリ
ック高須クリニ
ク高須クリニッ

上を参考に、grepで文字数を指定して処理する場合。 バイト数とかは気にしなくてもいいけど、ちょっと長くなる。

yes 高須クリニック | head -8 | tr -d \\n | grep -Eo .{8} | sed 's/.$//g'
blacknon@BS-PUB-UBUNTU-01:~$ yes 高須クリニック | head -8 | tr -d \\n | grep -Eo .{8} | sed 's/.$//g'
高須クリニック
須クリニック高
クリニック高須
リニック高須ク
ニック高須クリ
ック高須クリニ
ク高須クリニッ