これはタブ区切りファイルt.tsvです。
$ cat t.tsv
2022/05/05 -258.03
2022/05/07 -18.10
2022/05/09 -10.74
2022/05/09 -132.60
2022/05/12 -18.56
2022/05/12 -20.20
2022/05/17 -11.00
2022/05/17 -112.91
2022/05/17 -51.43
2022/05/17 -64.78
2022/05/18 -13.96
2022/05/18 -13.96
2022/05/18 -7.51
2022/05/19 -17.08
2022/05/20 -33.08
私はMacOS 12.4タイプを使用しています(マンページから:ソートユーティリティは、IEEE Std 1003.1-2008(「POSIX.1」)仕様に準拠しています。)最初にアルファシーケンスの昇順でcol 1を基準にソートし、次に数値の昇順でcol 2を基準にソートします。
$ cat t.tsv|sort --field-separator='\t' --key=1,1 --key=2,2n
2022/05/05 -258.03
2022/05/07 -18.10
2022/05/09 -10.74
2022/05/09 -132.60
2022/05/12 -18.56
2022/05/12 -20.20
2022/05/17 -11.00
2022/05/17 -112.91
2022/05/17 -51.43
2022/05/17 -64.78
2022/05/18 -13.96
2022/05/18 -13.96
2022/05/18 -7.51
2022/05/19 -17.08
2022/05/20 -33.08
2番目の列が昇順でソートされていない理由は何ですか?数字最初の列が同じ場合の順序です。同じ質問に対する多くのSE回答では、(a)単一の列をとして指定し、(b)このオプションを単一のキー定義に--key=1,1
適用できると言います。-n
--key=2,2n
修正する:私のシェルはbash
。
答え1
sort
理解する実装\t
や使用すべきその他の文字表現がわかりません。ANSI-Cの引用代わりに:
sort --field-separator=$'\t' --key=1,1 --key=2,2n t.tsv
その上によるとこのmacOSのマニュアルページ」Appleのソートマニュアルページには、上記のすべてのオプションのGNUロングオプションが含まれていますが、これらのオプションはまだmacOSで実装されていません。「最新バージョンのmacOSでは、--key
どちらも--field-separator
実装ごとに異なりますが、sort
移植性のためにまだ標準的な短いオプションを使用しています.
sort -t $'\t' -k 1,1 -k 2,2n t.tsv
上記のコマンドは、macOS、GNU、およびbusyboxからsort
次のものを返します。
$ sort -t $'\t' -k 1,1 -k 2,2n t.tsv
2022/05/05 -258.03
2022/05/07 -18.10
2022/05/09 -132.60
2022/05/09 -10.74
2022/05/12 -20.20
2022/05/12 -18.56
2022/05/17 -112.91
2022/05/17 -64.78
2022/05/17 -51.43
2022/05/17 -11.00
2022/05/18 -13.96
2022/05/18 -13.96
2022/05/18 -7.51
2022/05/19 -17.08
2022/05/20 -33.08