Ansatzの備忘録

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

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

問題56 非正規データ同士の結合

問題のファイルは

https://github.com/shellgei/shellgei160

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

キー 値 値 と並んでいるデータをキー 値(改行)キー 値 に直す方法がわからなくて詰まってしまった。曜日のソートもわからなかった。

解答例は

$ sed -E 's;^(.*):(.*);s/\1/\2/g;g' service_stop_weekday.txt | sed -f - service_depend_list.txt | tr -d :, | awk '{for(i=2;i<=NF;i++)print $i,$1}' | sort -u | awk '{a[$1]=a[$1]" "$2}END{for(k in a)print k":"a[k]}' | sed 'y/日月火水木金土/1234567/' | sort | sed 'y/1234567/日月火水木金土/' | sed 's/ /, /g;s/,//'

となる。最初の sedsed スクリプトを作っているらしいがどういう仕様なのかいまいちわからない。多分スラッシュの代わりにセミコロンで区切っているだけの、いつもの sed なのかなと思う。 tr の後の awk で for ループを回すことでキー 値 値 と並んでいるデータをキー 値(改行)キー 値 に直している。曜日のソートは一度数字に直してからやっている。