Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題97

問題97 縦読みの文字列の検出

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

なんだか前にも縦列のデータ処理をやった気がするがその時どうやっていたのか全く思い出せなかった。今回は縦と横を入れ替えて処理していた。

解答例は

$ cat tate.txt | awk '{printf("%-20s\n",$0)}' | tr ' ' @ | sed 's/./& /g' | sed 's/ $//' | rs -T | tr -d ' ' | awk '{print index($0,"たてよみ"),NR}' | awk '$1!=0'

となる。まず最初のawkで20文字に満たない行を空白で埋める。そのあとtrで空白を@に変えて、sedで各文字の後ろに空白を入れた後に行末のみ空白を削除する。それからrsで縦横を入れ替えて空白を削除する。そしてawkのindex関数を用いて特定の文字列が現れる行を探す。index(検索対象文字列,検索文字列)として使う。存在しない場合は0を出力するので、最後に1列目が0でない行を探してその行を出力する。