次の形式のコードを含むスクリプトを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.y
sort -k a+1.x+1,b
ワイ'0
' または存在しません。それ以外の場合は '' と同じです。sort -k a+1.x+1,b+1.y
このレガシー動作は環境変数を介して制御できます
_POSIX2_VERSION
(参照:標準準拠);POSIXLY_CORRECT
設定されていない場合は、 'を使用して既存の構文を使用して有効にすることもできます。-pos2
'展示する。
環境がGNUを実行するように設定されている場合は、sort
スタンドアロンとして使用できます。_POSIX2_VERSION
199209
+x
ls -l | _POSIX2_VERSION=199209 sort -n +4