次の例では、sort コマンドの動作方法を理解するのに役立つ必要があります。
猫テストファイル
入力データ:
thisfilehasduplicates
thissnowhasfallen
thisduckhasdied
thishallwasfull
berthammwasaclown
fredsimmisprimeminister
fredalbaisabinman
janetyceisscottish
janeouseisenglish
janellyriswelsh
ここでの目的は、最初の4文字に基づいて並べ替えて重複項目を削除することです。私は-k1.1,1.4
これが最初のフィールドの最初の4文字に基づいてソートされて達成されることを読んでいます。カンマは意味のある文字範囲1.4
(フィールド1、文字4)を表します。
sort -u -t -k1.1,1.4 テストファイル
-t
このバージョンは、フィールド区切り文字がないことを意味するために空白が続くと解釈しましたが、フィールド区切り文字は空白ですが、どういうわけかフラグを邪魔し、-k
私-u
が望むものを提供しないという意味かもしれないと思いました。
berthammwasaclown
fredalbaisabinman
fredsimmisprimeminister
janellyriswelsh
janeouseisenglish
janetyceisscottish
thisduckhasdied
thisfilehasduplicates
thishallwasfull
thissnowhasfallen
sort -u -k1.1,1.4 テストファイル
このフラグのないこのバージョン-t
は必要な機能を提供します。最初の4文字の重複排除は少なくともそうするようです。
berthammwasaclown
fredalbaisabinman
janellyriswelsh
thisduckhasdied
私のディストリビューション(SunOS 5.10)のマニュアルページを読んでいますが、特に重要な仕様ではドット表記法を使用するとき-k
や-t
フラグに関する部分を完全に理解していません。
答え1
sort -u -t -k1.1,1.4 testfile
このバージョンを -t の後に空白が付いてくると解釈するとフィールド区切り記号がないという意味ですが、これはフィールド区切り文字が空白という意味かもしれないと思います。
どちらもありません。 Unixのプログラムに渡される引数のトークン化は、ほとんどのUnixプログラムではプログラムではなくシェルによって定義されます。オプション/フラグ(先行引数)に値が必要で、次のように渡さない場合。引数の一部である場合、次の引数が値として使用されます。フィールド区切り文字-t -k1.1,1.4
として使用-k1.1,1.4
され、1文字(たとえば)で切り捨てられます-
。したがって、-k
そのオプションは認識されないため、主キー定義(つまり、行全体)を使用してソートされます。
牛に似た一種の栄養この場合、ソートすると、「tab」値(つまり値-t
)が複数文字であるというエラーが発生します。この動作はより便利ですが、伝統や標準では必要ありません。 SunOS-aka-Solaris ではユーティリティは不要で、xpg4 または xpg6 バージョンを指定しない限り、実際に XPG および POSIX と互換性のないユーティリティが多数あります。そうですか? - しかし、現在仮想化されているSolaris 10テストシステムでは、どちらも有用な動作では/usr/bin/sort
ありません。/usr/xpg4/bin/sort
本当にこの空間が欲しいなら特徴空白文字は含まれていないため、データに意味のないフィールド区切り文字で次の情報を知らせる必要があります。シェル-t
引数の一部または追加の引数として空白文字を渡します。
sort -t" " -k1.1,1.4
sort -t' ' -k1.1,1.4
sort -t\ -k1.1,1.4
sort "-t " -k1.1,1.4
sort '-t ' -k1.1,1.4
sort -t " " -k1.1,1.4
sort -t ' ' -k1.1,1.4
sort -t \ -k1.1,1.4
Unix型システム(元のSunOSがUnixブランドであるかどうかにかかわらず)では、「空白」とは通常、単純な空白文字以上を意味します。通常、少なくともスペースが含まれます。と(水平)タブLF、VT、FFなど、通常「垂直」スペースを持つ文字です。標準sort
では、フィールド区切り文字として単一の文字しか使用できないため、スペースは使用できません。対照的に、シェルとawk(デフォルト)は複数の空白文字を使用してフィールドを解析します。