sort 排序,去重

可以实现根据不同的数据类型进行排序,针对文本的内容,以行为单位来排序。

基础工作原理

sort将文件的每一行作为单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后升序进行输出

  1. [root@hecs-215335 ~]# cat sort1.txt #查看文件内容
  2. awk 12
  3. ends 33
  4. fire 09
  5. can 22
  6. know 01
  7. dead 35
  8. awk 12
  9. dead 32
  10. fire 09
  11. [root@hecs-215335 ~]# sort sort1.txt #排序,默认以升序排序
  12. awk 12
  13. awk 12
  14. can 22
  15. dead 32
  16. dead 35
  17. ends 33
  18. fire 09
  19. fire 09
  20. know 01
  21. [root@hecs-215335 ~]# sort -u sort1.txt #去除重复行
  22. awk 12
  23. can 22
  24. dead 32
  25. dead 35
  26. ends 33
  27. fire 09
  28. know 01
  29. [root@hecs-215335 ~]# sort -n -r sort1.txt #只按照数字排序,并且是降序
  30. awk 12
  31. awk 12
  32. can 22
  33. dead 32
  34. dead 35
  35. ends 33
  36. fire 09
  37. fire 09
  38. know 01
  39. #这里是0在前面!!!!
  40. [root@hecs-215335 ~]# sort -n -r sort1.txt -o sort1.txt
  41. #-o 参数。直接将输出的内容重定向到指定文件 不需要再用 `>`
  42. [root@hecs-215335 ~]# sort -n -k 2 -t : sort1.txt #设置分隔符,以列排序
  43. #在txt文件中,按照数字排序,-k选择第2列排序,-t设置分隔符为:

-u去除重复的行

-n只以数字来排序,并且是1~0,并不是0-9

-r降序排序

-k选择针对某一列进行排序

-t设置分隔符

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

tr 替换字符

tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。

  1. cat 1.txt | tr "abc" "123" #将文件中的abc转换为123
  2. cat 1.txt | tr "[a-z]" "[A-Z]" #将小写转换为大写
  3. cat 1.txt | tr "[0-9]" "[a-j]" #将0-9转换为a-j
  4. cat 1.txt | tr -d "small" #将small删除
  5. cat 1.txt | tr -s "1" "2" #将1转换为2 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

cut 截取,部分截取

cut命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中。我们可以使用 cut 命令从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来。

  1. cut -d":" -f 1 /etc/passwd #-d设置分隔符,-f 截取第1行
  2. grep '/bin/bash' /etc/passwd| cut -d ':' -f 1,6 #以关键字查询文件 并且以:为切割符
  3. #获得第1列第6列内容
  4. grep '/bin/bash' /etc/passwd|cut -d ':' --complement -f 2 #以关键字查询文件
  5. #并且以:为切割符,排除显示第2列
  6. cut -d ':' -f1,7 --output-delimiter=' ' /etc/passwd|sort #以:为切割符,显示第
  7. #1和第7行。将分隔符显示为 "

paste 合并文件的列

paste指令会把每个文件以列对列的方式,一列列地加以合并。

  1. vim aa.txt #随便创建两个文件
  2. vim bb.txt
  3. paste aa.txt bb.txt #将两个文件内容合并
  4. aa 11
  5. bb 22
  6. cc 33
  7. dd 44
  8. ee 55
  9. ff 55
  10. paste -d- aa.txt bb.txt #将两个文件内容合并,以“-”
  11. aa-11
  12. bb-22
  13. cc-33
  14. dd-44
  15. ee-55
  16. ff-55
  17. paste -d"#@" aa.txt bb.txt cc.txt dd.txt #将两个文件内容合并,并且逐个用#@分割
  18. aa#11@as#as
  19. bb#22@bc#bc
  20. cc#33@cd#cd
  21. dd#44@de#de
  22. ee#55@ef#ef
  23. ff#55@fg#fg

uniq 检查及删除文本文件中重复出现的行列

  1. sort sort1.txt | uniq #文件排序并相邻去重
  2. sort sort1.txt | uniq -d #查找文件中的重复行
  3. uniq -s 3 sort1.txt #忽略前3个字符,对3个后的字符进行比较
  4. uniq -w 3 sort1.txt #只对前3个字符进行比较

tee 读取标准输入的数据,并将其内容输出成文件

  1. tee qwq.123 #此时随便输入内容,就会将输入的内容添加到文件中!
  2. 以上命令执行后,将提示用户输入需要保存到文件的数据,如下所示:
  3. My Linux #提示用户输入数据
  4. My Linux #输出数据,进行输出反馈