詳細Linuxのソートuniqのコマンド

ソート

機能:ソートするテキストファイルの内容を、テキストファイルの内容のソート缶は、単位でオーダー。

ソート[ - bcdfimMnr ] [ - O <出力ファイル>] [ - T <区切り文字>] [+ <開始列> - <終了フィールド>] [ - ヘルプ] [ - のverison ] [ファイル]

  各ラインの開始前に空白文字を無視-b。

  ファイルが順にソートされているかどうかをチェックし、-C。

  ソートすると-d、文字、数字、スペース文字を処理し、それ以外の文字を無視します。

  -Fとき順序、大文字小文字など。

  -Iときの順序は、040から176の間でASCII文字に加えて、他の文字を無視します。

  複数のファイルをマージする-mソート。

  -M最初の3文字の略語は、月によってソートすること。

  -n    大きさは数値でソート。

  -o <出力ファイル>結果は指定したファイルに分類しました。

  -r    逆順ソート。

  -tフィールド時に<区切り文字>を指定し、ソート使用される区切り文字。

 -kソートにどのセクションを選択

  + <開始列> - <終了フィールド>ソートに指定されたフィールド、前のフィールドのフィールドの開始から終了までのフィールドの範囲。

ソート互いにユニットとして、ファイルの各行の比較の原理は、背面からの最初の文字と比較されるASCIIコード値が続き、そして昇順に最終的にそれらの出力。

ソース・ファイル デフォルトのソート 李のために 李のために
  • バナナ
  • 林檎
  • オレンジ
  • 林檎
  • 1
  • 2
  • 10

 

 
  • 1
  • 10
  • 2
  • 林檎
  • 林檎
  • バナナ
  • オレンジ

 

-u出力ラインに重複する行を削除します。

  • 1
  • 10
  • 2
  • 林檎
  • バナナ
  • オレンジ

各ラインの開始前に空白文字を無視-b。

猫space.txt 猫space1.txt  
  •     AAA
  •     NN
  •  TT
  •   3
  • 11
  • AAA
  • NN
  • TT
  • 3
  • 11
 
ソートspace.txt ソートspace1.txt ソート-b space.txt
  •     AAA
  •     NN
  •   3
  •  TT
  • 11 
  • 11 
  • 3
  • AAA
  • NN
  • TT
  • 11 
  •   3
  •     AAA
  •     NN
  •  TT

 

 

-o出力元のファイルへのソート結果

使用のリダイレクト:

ソートのtest.txt> test.txtの后

test.txtは空です

ソートtest.txtの-oあるtest.txt

猫のtest.txt

  • 1
  • 10
  • 2
  • 林檎
  • 林檎
  • バナナ
  • オレンジ

-tフィールド時に<区切り文字>を指定し、ソート使用される区切り文字。

-kソートにどのセクションを選択

 

date.txt猫 
2017年12月2日
2017年1月9日
2017年10月23日
2017年4月24日

 

ソート-n -k 2 -t'-」date.txt 
  • 2017年1月9日
  • 2017年4月24日
  • 2017年10月23日
  • 2017年12月2日

-n 大きさは数値でソート。

ソート-nのtest.txt

  • 林檎
  • 林檎
  • バナナ
  • オレンジ
  • 1
  • 2
  • 10

数字のデフォルトのソート文字列は、ケースに応じてソートされます

だから、10のケース2は、表示されます。この状況は、-nを使用して回避することができます

 

書類が順番にソートされているかどうかを確認するために、-C

ソート-cソートされたファイル、ノーリターン情報は、エコー$?0

ソート-cソートされていないファイルは、そこにヒントが、あるエコー$?1

-r ソートの逆順 

猫のtest.txt

  • 1
  • 11
  • 2
  • 34

ソート-n -r test.txtの

  • 34
  • 11
  • 2
  • 1
 

UNIQ

[-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

-u或--unique 只保留出现唯一一次的行列。

-d或--repeated 仅显示重复出现的行列,出现一次的行列不会显示

-c 在每列旁边显示该行重复出现的次数。

-f n 或--skip-fields=n 忽略前N个字段。字段由空白字符(空格符、Tab)分隔

-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。-s n:忽略前n个字符,从n+1个字符开始比较

-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。-w n:只比较前n个字符,对每行第n个字符以后的内容不作对照

 -i, --ignore-case     在比较的时候不区分大小写

[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;

[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

uniq 是对排序好的内容去重当重复的行并不相邻时,uniq 命令是不起作用的,所以需要先使用sort排序,在使用uniq去重

举栗:

原文件

默认去重

 

仅显示出现一次的行 -u
  1. e   bsd     1000    600 4M
  2. c   Debian  600     200 8K
  3. b   linux   1000    200 5K
  4. a   mac     2000    500 2K
  5. f   SUSE    4000    300 6M
  6. c   win7    2000    100 7G
  7. d   winxp   4000    300 3G
  8. d   winxp   500     300 3G
  9. g   winxp   500     300 3G
  10. g   winxp   500     300 3G
  11. G   WINXP   500     300 3G

uniq -c test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 2 g   winxp   500     300 3G
  10. 1 G   WINXP   500     300 3G

uniq -u -c test_uniq.txt 

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 1 G   WINXP   500     300 3G

不显示出现多次的行

仅显示重复出现的行 -d 比较的时候不区分大小写 -i

uniq -d -c test_uniq.txt 

  1. 2 g   winxp   500     300 3G

不显示只出现一次的行

uniq -i -c test_uniq.txt 

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 3 g   winxp   500     300 3G

不区分大小写,所以有三行进行的合并

比较时忽略前n个字段,从n+1列开始比较 -f n 比较时忽略前n个字符,从n+1个字符开始比较 -s n

uniq -c -f 3 test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 4 d   winxp   500     300 3G

 

源文件

注意空格符
  • a b 30 3G
  • a h 30  3G
  • a g  30 3G
  • a  ffff  30 3G
  • uniq -c -f 2 test.txt

 

  1. 1 a b 30 3G
  2. 1 a h 30  3G
  3. 2 a g  30 3G

忽略前2个字段时,前2个字段中的字符以及空格不同都不会有影响,但是第2个字段之后的空格与字符变化会影响去重效果

uniq -c -s 1 test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 3 d   winxp   500     300 3G
  9. 1 G   WINXP   500     300 3G

忽略前1个字符,

d   winxp   500     300 3G跟g   winxp   500     300 3G会被认为是一样的

只比较前n个字符,对每行第n个字符以后的内容不作对照 -w n 指定输出文件

uniq -c -w 1 test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 2 d   winxp   4000    300 3G
  8. 2 g   winxp   500     300 3G
  9. 1 G   WINXP   500     300 3G

uniq -c test_uniq.txt  out.txt

cat out.txt 

  1.       1 e   bsd     1000    600 4M
  2.       1 c   Debian  600     200 8K
  3.       1 b   linux   1000    200 5K
  4.       1 a   mac     2000    500 2K
  5.       1 f   SUSE    4000    300 6M
  6.       1 c   win7    2000    100 7G
  7.       1 d   winxp   4000    300 3G
  8.       1 d   winxp   500     300 3G
  9.       2 g   winxp   500     300 3G
  10.       1 G   WINXP   500     300 3G

默认去重,将去重结果保存到out.txt

おすすめ

転載: www.cnblogs.com/mianbaoshu/p/12069823.html