Linuxソート「フィールドをスキップする」オプションは文書化されていませんが、機能しているようです。

Linuxソート「フィールドをスキップする」オプションは文書化されていませんが、機能しているようです。

次の形式のコードを含むスクリプトをAIXからLinuxに移植しようとしています。

grep <pattern> $LOG | sort -b +rn4 -5 +2 -3

AIXでは、このソート構文が文書化されています。デフォルトでは、+a -b構文はaフィールドをスキップし、aとbの間のフィールドをソートキーとして扱うことを意味します。

Linuxソートコマンドは、+a "skip field"引数の "rn"(逆数)フラグが好きではないため、Linuxでは機能しません。しかし、動作します。

grep <pattern? $LOG | sort -b -rn +4 -5 +2 -3

明らかに「フィールドをスキップする論理」はいLinuxソートはサポートされていますが、マニュアルページに文書化されていません(とにかく見ることはできます)。両方のシステムで使用可能な-kオプションは、キーフィールド番号を指定します。ところで、ここで奇妙な現象が発生します。 AIXでは

ls -l | sort -n +4

5番目のフィールド(サイズ)に基づいてソートされたファイルのリストを生成します。ただし、Linuxでは同じコマンドを実行するとエラーが発生します。

並べ替え: 読み取れません: +4: そのファイルまたはディレクトリがありません。

ls -l | sort -n +4 -5

しかし、それは動作します。したがって、明らかに+skip-skipキー選択構文は有効ですが、開始列と終了列のスキップパラメータの両方を指定した場合にのみ可能です。そしてそれは文書化されていません。だから私の質問は - この列をスキップする構文はもう使用されていませんか?コードがコマンドにあり、誰もそれを取り出す方法がわからないので動作しますか?

ベストアンサー1

あなたのLinuxシステムがGNUを使用しているとしますsort。 GNUsortのマニュアルページは完全な文書を提供しません。代わりに、文書は情報ファイル(info sort)形式で提供されます。Coreutilsのオンラインマニュアルにもあります。。後者は現在見ている動作を説明します。

POSIX 1003.1-2001に準拠していないシステムでは、ソートキーを指定するsortために既存の原点ゼロ構文がサポートされています。従来のコマンド '' は、次のような場合 ' ' と同じです。+pos1 [-pos2]sort +a.x -b.ysort -k a+1.x+1,bワイ' 0' または存在しません。それ以外の場合は '' と同じです。sort -k a+1.x+1,b+1.y

このレガシー動作は環境変数を介して制御できます_POSIX2_VERSION(参照:標準準拠);POSIXLY_CORRECT設定されていない場合は、 'を使用して既存の構文を使用して有効にすることもできます。-pos2'展示する。

環境がGNUを実行するように設定されている場合は、sortスタンドアロンとして使用できます。_POSIX2_VERSION199209+x

ls -l | _POSIX2_VERSION=199209 sort -n +4

おすすめ記事