Linux と macOS の seq -w の動作の違い

seq -w は、連続する数字のゼロ埋めをする時に便利です。

たとえば

seq -w 10 とすると

$ seq -w 10
01
02
03
04
05
06
07
08
09
10

となります。ひと桁の数字も最初に0をつけて2桁になるようにしてくれます。

これを少し応用して、私はLinux環境においてひと桁の数字でも以下のようにしていました。

$ seq -w 05
01
02
03
04
05

しかし、今日、macOSでこれをやったところ以下のようにゼロ埋めがされませんでした。

$ seq -w 05
1
2
3
4
5

これを解決するために、 seq -f %02g 5 が有効でした。

$ seq -f %02g 5
01
02
03
04
05

ちょっとした気づきでしたので備忘録として記載しておきます。

Linux と macOS の seq -w の動作の違い” へのコメント

  1. いつも有用な記事をありがとうございます。
    私も似たような経験がありますので共有させていただきます。
    私の場合は01 02 03のような文字列から0を削除したいと思い、linuxでsedを用いてシェルスクリプトを作成し、macに流用していたのですが、macではうまく動かないことに気が付きました(BSDのsedだとオプションを使わないとバックスラッシュのエスケープを正規表現として認識してくれない)。そのときに知ったのがコマンドにはGNU系とBSD系があるということでした。

    そこでmacにGNU系のコマンドをinstallしましたが、GNU系のコマンドは頭文字にgがつく(sedだとgsed)ので、linuxで作成したスクリプトを修正することなくそのままmacでも使えるようにするために、以下の記事を参考に裏でGNU系のコマンドが利用されるようにしました(私はbash_profileにPATHを設定しました)。
    https://ryanparman.com/posts/2019/using-gnu-command-line-tools-in-macos-instead-of-freebsd-tools/

    これだとlinuxのスクリプトに変更を加えなくてもmacで利用できるかなと思います(私は絶対に忘れそうなので。。。)。

    釈迦に説法で、大変恐縮ですが、共有させていただきました。

    吉田(NIH)

    • 吉田先生、どうもありがとうございます!

      おっしゃる通りですよね。

      自分自身の環境はそのような工夫が一番ですね。
      他の方にスクリプトを渡す時にGNUとBSDの違いを意識することが必要になりますね。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください