shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

这篇具有很好参考价值的文章主要介绍了shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

sort命令

  • 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序.

  • 比较原则:从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出.

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

语法格式

sort [选项]   参数
cat file | sort  选项

常用选项

选项 命令含义
-n 按照数字进行排序,默认按照升序排序
-r 反向排序,按照降序排序
-u 等同于uniq,表示相同的数据仅显示一行
-t 指定字段分隔符,默认使用[Tab]键分隔
-k 指定排序字段
-o <输出文件>:将排序后的结果转存至指定文件
-f 忽略大小写,会将小写字母都转换为大写字母来进行比较
-b 忽略每行前面的空格

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

uniq命令

  • 用于报告或者忽略文件中连续的重复行,常与sort 命令结合使用.

语法格式

uniq  [选项]   参数
cat file | uniq 选项

常用选项

选项 命令含义
-c 进行计数,并删除文件中重复出现的行
-d 仅显示连续的重复行
-u 仅显示出现一次的行

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

例题演练一:

查找已知文件中出现超过三次的IP地址;

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

[root@clr /opt/practice]# vim 1.sh

#!/bin/bash
#查找已知文件test4中出现超过三次的IP地址

cat test4 | sort -n -t '.' -k4 | uniq -c > ./count.txt
#将test4文件中的IP地址以.分割,按照地字段进行排序后,统计重复行数,并删除重复行,将结果重定向写入到当
前目录下的count.txt文件中
IFSB=$IFS
IFS=$'\n'   #修改for循环的IFS环境只以\n换行符进行分割

for i in $(cat ./count.txt)
do
  num=$(echo $i | awk '{print $1}')  #获取重复行出现的次数
  #echo $num    #输出重复次数
  if [ $num -gt 3 ];then  #判断重复次数大于3次,输出第二字段的ip地址
    echo $i | awk '{print $2}'
  fi
done

IFS=$IFSB

[root@clr /opt/practice]# vim test4

192.168.80.1
192.168.80.45
192.168.80.1
192.168.80.1
192.168.80.79
192.168.80.11
192.168.80.100
192.168.80.100
192.168.80.561
192.168.80.11
192.168.80.11
192.168.80.100
192.168.80.561
192.168.80.87
192.168.80.11
192.168.80.3
192.168.80.100
192.168.80.51111

[root@clr /opt/practice]# vim count.txt 

      3 192.168.80.1
      1 192.168.80.3
      4 192.168.80.11
      1 192.168.80.45
      1 192.168.80.79
      1 192.168.80.87
      4 192.168.80.100
      2 192.168.80.561
      1 192.168.80.51111

例题演练二:

查找一分钟内五次登录系统输入密码错误的用户,并将该IP地址加入到黑名单/etc/hosts.deny中;

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

[root@clr /opt/practice]# vim 2.sh

#!/bin/bash
#查找一分钟内五次登录系统输入密码错误的用户,并将该IP地址加入到黑名单/etc/hosts.deny中

count=$(cat /var/log/secure|grep 'Failed password'|grep 'root'|awk '{print $11}'|sort -n -t '.' -k4|uniq -c)
#将test4文件中的IP地址以.分割,按照地字段进行排序后,统计重复行数,并删除重复行,将结果赋值给变量count
IFSB=$IFS
IFS=$'\n'   #修改for循环的IFS环境只以\n换行符进行分割

for i in $count
do
  num=$(echo $i | awk '{print $1}')  #获取重复行出现的次数
  #echo $num    #输出重复次数
  if [ $num -gt 5 ];then  #判断重复次数大于3次,输出第二字段的ip地址
    echo $i | awk '{print $2}'
  fi
done

IFS=$IFSB

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

tr命令

  • 常用来对来自标准输入的字符进行替换、压缩和删除.

语法格式

tr [选项] [参数]

常用选项

选项 命令含义
-c 保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换
-d 删除所有属于字符集1的字符
-s 将重复出现的字符串压缩为一个字符:用字符集2 替换 字符集1
-t 字符集2 替换 字符集1,不加选项同结果

参数

字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数"字符集2"指定转换的目标字符集。但执行删除操作时,不需要参数"字符集2;

字符集2:指定要转换成的目标字符集

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

删除空行的两种方法;

[root@clr /opt/practice]# echo -e "ab\n\n\n\n\n\ncd"
ab





cd
[root@clr /opt/practice]# echo -e "ab\n\n\n\n\n\ncd" | tr -s "\n"   #将重复出现的换行符压缩为一个,起到删除空行的效果
ab
cd
[root@clr /opt/practice]# echo -e "ab\n\n\n\n\n\ncd" | grep -v "^$"  #grep -v反向取空格,将空格以外的左右行输出
ab
cd

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
实战演练

利用sort和tr命令,实现元素序列的排序;

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

[root@clr /opt/practice]# vim 4.sh

#!/bin/bash
#利用sort和tr命令,实现元素序列的排序

arr=(14 25 78 36 1 3 5 45 39 68 14)
echo "排序前数据的值为:${arr[@]}"

newarr=($(echo ${arr[@]}| tr ' ' '\n' | sort -n | tr '\n' ' '))

echo "排序后数据的值为:${newarr[@]}"      

windows的换行:由回车符/r和换行符/n组成;而linux的换行:由换行符/n组成.

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

安装dos2unix工具,即可解决windows与linux文件不能兼容使用的问题;

[root@clr /opt/practice]# yum install -y dos2unix
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.huaweicloud.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 dos2unix.x86_64.0.6.0.3-7.el7 将被 安装
--> 解决依赖关系完成

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

cut命令

显示行中的指定部分,删除文件中指定字段.

语法格式

cut 参数
cat file | cut选项

常用选项

选项 命令含义
-f 通过指定哪一个字段进行提取。cut命令使用"TAB"作为默认的字段分隔符
-d "TAB”是默认的分隔符,使用此选项可以更改为其他的分隔符
–complement 此选项用于排除所指定的字段
–output-delimiter 更改输出内容的分隔符

注意:

sort -t 指定分隔符  -k  指定字段号
cut  -d 指定分隔符  -f  指定字段号

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

split命令

split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等
语法格式

split 选项 参数 原始文件 拆分后文件名前缀

常用选项

-l:以行数拆分
-b:以大小拆分
选项 命令含义
-l 按照行数分割文件,默认1000行一个文件
-b 按照文件大小分割文件,单位:字节

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

paste命令

paste可以将不同文件的数据放在一行。缺省情况下,paste使用空格或者tab键分隔新行中的不同文件。

命令格式

paste <-d> <-s> file1 file2

常用选项

选项 命令含义
-d 制定不同于空格或tab键的分隔符。比如使用@分隔符,就可以-d @
-s 将每个文件合并成行,而不是按行合并。(即每个文件中的内容占一行。而不是从每个文件取行,合并成新行)

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

eval命令

命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解
shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解

[root@clr /etc/yum.repos.d]# bash 4.sh 1 2 3 7 6 6
6
[root@clr /etc/yum.repos.d]# cat 4.sh
#!/bin/bash

eval echo \$$#
[root@clr /etc/yum.repos.d]# eval echo |$$# -> echo $6 -> 6

shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解文章来源地址https://www.toymoban.com/news/detail-438367.html

总结

命令关键字 命令含义 常用选项
sort 排序 -n(数字排序) -r(反向排序) -t(指定分隔符) -k(指定排序字段)
tr 替换、删除、压缩 -t(字符集2替换字符集1) -d(删除) -s(压缩重复字符) -c(保留字符集1,其余所有用字符集2替换)
cut 截取字段 -d(更改分隔符) -f(指定提取字段) --output-delimiter(更改输出分割符) --complement(排除指定字段)
uniq 去重、统计重复次数 -c(删除重复行,并进行计数) -d(显示连续的重复行) -u(仅显示出现一次的行)
split 拆分文件 -l(以行数拆分) -b(以大小拆分)
paste 按列合并文件 -d(指定分割符) -s(转置,将列转换为行)
eval 扫描两次执行命令,放在命令前使用 ——

到了这里,关于shell脚本之“sort“、“uniq“、“tr“、“cut“命令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android 运行shell 脚本文件或shell命令

    android 运行shell 脚本文件或shell命令 一.运行shell脚本文件 1.test.sh文件内容 #!/bin/bash echo \\\"I am a script\\\" ps 2.将shell文件拷贝到Android设备目录 3.执行脚本文件 Runtime.getRuntime().exec(\\\"sh /sdcard/lilei/test.sh\\\"); 注: 应用需要有存储访问权限,如果shell文件中有文件访问请用绝对路径,否则访问

    2024年03月12日
    浏览(63)
  • shell批量执行命令与文件传输脚本

    对未进行主机信任操作的服务器进行批量操作 由于ssh只能在交互模式中输入服务器密码进行登录登操作,不便于进行大批量服务器进行巡检或日志采集。sshpass恰好又解决了这个问题,使用 ssh -p passwd 可以实现命令行输入密码操作,便于进行规模巡检 首先需要在脚本执行机器

    2024年02月08日
    浏览(47)
  • Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传和下载

    Shell脚本常用命令 简介 1、什么是shell: Shell 是一个用 C 语言编写的应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序,扩展名为.sh。 2、如何编写shell脚本: 文本编辑器(可以使用

    2024年02月03日
    浏览(73)
  • 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

    运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 path = $(cd $(dirname $0); pwd)解析: 1、取当前运行脚本的所在路径: $0 2、取当前脚本所

    2024年02月10日
    浏览(51)
  • linux 之 shell脚本实现SFTP下载、上传文件、执行sftp命令

    需求方通过sftp不定时的上传一批用户(SBXDS_ACC_M_任务ID_yyyymmddHHMMSS.csv),需要我们从这些用户中找出满足条件的用户。然后把这些结果用户通过文件的形式上传到ftp。 ip1能连接hive库环境,不能连接sftp。 ip2不能连接hive库环境,能连接sftp。 ip1和ip2是共享盘,能同时访问公共目录

    2024年02月19日
    浏览(70)
  • linux | sort、uniq、history、xargs、grep 正则表达式(不深入)

    1.正则表达式 sort命令 #把内容读到内存,然后以行为单位进行排序并把结果输出到stdout(因为直接把排序结果输出,所以可以重定向),但是并不修改源文件内容。 参考如下 uniq命令 #流程和sort类似,也是把相邻的相同行去掉,最后输出。注意间隔的相同行无法去除。 如何把

    2024年02月16日
    浏览(45)
  • linux中用shell脚本定时备份重要日志等文件【命令结果输出也在内。按月份自动创建时间自动规划到月份中】、linux中用shell脚本备份文件并自动scp汇总到一个服务器上

    现在甲方有一个需求:要求每月备份系统日志 问题: 1、有37台服务器需要备份且汇总到一

    2024年02月19日
    浏览(59)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(75)
  • 【Linux命令-shell】虚拟机中创建shell脚本、查看当前路径、执行脚本

    目录 一、创建shell脚本 二、查看当前的路径 三、执行脚本 一、创建shell脚本 shell脚本的特点 提前将可执行的命令语句写入一个文件中 顺序执行 解释器逐行解释代码 常见的脚本有:shell、python、PHP...... 注:用什么解释器就是什么脚本 编写shell脚本: 步骤: 1、新建文件 2、

    2024年02月05日
    浏览(69)
  • shell脚本----awk命令

    逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个\\\"字段\\\"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包