Ansatzの備忘録

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

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

問題84 改行コードの識別と集計

問題のファイルは

https://github.com/shellgei/shellgei160

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

grepで改行コードを抜き出してさあどうしようかと考えてみたが、tr で余分なものすべてを消したほうが早かった。

解答例は

zcat newline.txt.gz | tr -dc '\015\012' | sed -z 's/\x0d/CR/g;s/\x0a/LF&/g'

となる。tr -dc は''で囲った文字列のみを残すという意味になる。-d で指定した文字を削除して-c でその条件を反転させている。次のsedでは改行コードを16進数で指定してそれをただの文字列に置換している。ただしLFに関してはLFという文字列+改行コード0x0aとなるように&を置換に用いている。これで1行ずつ改行コードが表示される。あとはsort してuniq -cをすれば数えられる。