/lost+found/amanoese

作られては忘れられていくコードや日常のための日記

qiitaに書けなかったコードたち(日付の連番)

qiitaに書く前にいろいろと試してるんだけど、 そんなコードたちを書いてみたいなと。

書いた記事は、
シェルでよく使う日付の連番をワンライナーで
という普通のありふれた処理で、リンク先でも書いたとおりfor文のコードはたくさん引っかかるのですが、 標準出力からxargsで処理する形式で書いてるものは、見つからない。

シェル芸初心者としていうのも何だけど、ユニケージ開発手法って流行ってないよね。。。

仕様

bashで日付を連番で出力する

※環境は、Ubuntu 16.04

qiitaには書けないコードたち - 1

さてgistに残ってるログから見ると、
コマンドを書くにあたって最初に書いたのは以下のコード。

$ yes $(date +%s) | head -10 | awk '{ print $1 + (24 * 60 * 60 * NR)}' | xargs -I_ -n1 date -I --date='@_'

先頭のyesコマンドがとても気持ち良い。
なぜか先頭に書いてしまうyes。
あとのコマンドは惰性で書いてるようなもの。

dateのオプションをhelpで見ただけなので、詳細な設定方法を考えずエポックで指定しているのが面白い。
てかhelp下の方しか読んでないよね過去の俺。

あとxargsのオプション-Iではよく'@'を指定するけど、
dateのオプションで解釈されてしまうから'_'で指定しているあたりが可笑しい

qiitaには書けないコードたち - 2

次に書いたのは以下のコード。

$ seq 0 10 | awk "{ print $(date +%s) + (24 * 60 * 60 * \$1)}" | xargs -I_ -n1 date -I --date='@_'

流石にyesはまずいと思ったのか、seqで書いてるし、awkの中でdateを使うことで前後日を求められるようにしてる。 ただ、awkの中でコマンド置換は無いですよ。コマンド置換するためにダブルコートになってるし、そのために$の前にエスケープも酷い。全体的に美しくない。

qiitaに書いたコード

そして、dateのオプションをちゃんと調べて以下になる。

シンプルで美しい。。。
文字数も半分ほどですし

ネットで見つかるコードって短くて綺麗なものが多いけど、みんな時間かけてるんだろうなとか。
もしくは、自分が時間かけ過ぎなのか。。。