🖍️
Command
  • Command
  • Linux
    • ab - Apache服务器的性能测试工具
    • accept - 指示打印系统接受发往指定目标打印机的打印任务
    • ack - 比grep好用的文本搜索工具
    • alias - 定义或显示别名。
    • apachectl - Apache服务器前端控制工具
    • apk - Alpine Linux 下的包管理工具
    • apropos - 在 whatis 数据库中查找字符串
    • apt-get - Debian Linux发行版中s的APT软件包管理工具
    • apt-key - 管理Debian Linux系统中的软件包密钥
    • apt-sortpkgs - Debian Linux下对软件包索引文件进行排序的工具
    • aptitude - Debian Linux系统中软件包管理工具
    • ar - 建立或修改备存文件,或是从备存文件中抽取文件
    • arch - 显示当前主机的硬件架构类型
    • arj - 用于创建和管理.arj压缩包
    • arp - arp 命令用于显示和修改 IP 到 MAC 转换表
    • arpd - 收集免费ARP信息
    • arping - 通过发送ARP协议报文测试网络
    • arptables - 管理ARP包过滤规则表
    • arpwatch - 监听网络上ARP的记录
    • as - 汇编语言编译器
    • at - 在指定时间执行一个任务
    • atop - 监控Linux系统资源与进程的工具
    • atq - 列出当前用户的at任务列表
    • atrm - 删除待执行任务队列中的指定任务
    • awk - 文本和数据进行处理的编程语言
    • axel - 多线程下载工具
    • badblocks - 查找磁盘中损坏的区块
    • basename - 打印目录或者文件的基本名称
    • batch - 在系统不繁忙的时候执行定时任务
    • bc - 算术操作精密运算工具
    • bg - 将前台终端作业移动到后台运行
    • bind - 显示或设置键盘按键与其相关的功能
    • blkid - 查看块设备的文件系统类型、LABEL、UUID等信息
    • blockdev - 从命令行调用区块设备控制程序
    • bmodinfo - 显示给定模块的详细信息
    • break - 结束for,while或until循环
    • builtin - 执行bash内建命令
    • bunzip2 - 创一个bz2文件压缩包
    • bye - 命令用于中断FTP连线并结束程序
    • bzcat - 解压缩指定的.bz2文件
    • bzcmp - 比较两个压缩包中的文件
    • bzdiff - 直接比较两个.bz2压缩包中文件的不同
    • bzgrep - 使用正则表达式搜索.bz2压缩包中文件
    • bzip2 - 将文件压缩成bz2格式
    • bzip2recover - 恢复被破坏的.bz2压缩包中的文件
    • bzless - 增强.bz2压缩包查看器
    • bzmore - 查看bzip2压缩过的文本文件的内容
    • cal - 显示当前日历或指定日期的日历
    • cancel - 取消已存在的打印任务
    • cat - 连接多个文件并打印到标准输出
    • cd - 切换用户当前工作目录
    • cdrecord - Linux系统下光盘刻录功能命令
    • chage - 修改帐号和密码的有效期限
    • chattr - 用来改变文件属性
    • chcon - 修改对象(文件)的安全上下文
    • chfn - 用来改变finger命令显示的信息
    • chgrp - 用来变更文件或目录的所属群组
    • chkconfig - 检查或设置系统的各种服务
    • chmod - 用来变更文件或目录的权限
    • chown - 用来变更文件或目录的拥有者或所属群组
    • chpasswd - 批量更新用户口令的工具
    • chroot - 把根目录换成指定的目的目录
    • chsh - 用来更换登录系统时使用的shell
    • cksum - 检查文件的CRC是否正确
    • clear - 清除当前屏幕终端上的任何信息
    • clock - 用于调整 RTC 时间
    • clockdiff - 检测两台linux主机的时间差
    • cmp - 比较两个文件是否有差异
    • col - 过滤控制字符
    • colrm - 删除文件中的指定列
    • comm - 按行比较两个已排序的文件
    • command - 调用并执行指定的命令
    • compress - 使用Lempress-Ziv编码压缩数据文件
    • consoletype - 输出已连接的终端类型
    • continue - 结束本次循环,继续执行下一个for,while或until循环
    • convertquota - 把老的配额文件转换为新的格式
    • cp - 将源文件或目录复制到目标文件或目录中
    • cpio - 用来建立、还原备份档的工具程序
    • crontab - 提交和管理用户的需要周期性执行的任务
    • csplit - 将一个大文件分割成小的碎片文件
    • cu - 用于连接另一个系统主机
    • cupsdisable - 停止指定的打印机
    • cupsenable - 启动指定的打印机
    • curl - 利用URL规则在命令行下工作的文件传输工具
    • cut - 连接文件并打印到标准输出设备上
    • date - 显示或设置系统时间与日期
    • dd - 复制文件并对原文件的内容进行转换和格式化处理
    • declare - 声明变量,设置或显示变量的值和属性
    • depmod - 分析可载入模块的相依性
    • df - 显示磁盘的相关信息
    • dhclient - 动态获取或释放IP地址
    • dhcpd - 运行DHCP服务器
    • dhcrelay - 使用dhcrelay命令可以提供中继DHCP和BOOTP请求
    • diff - 比较给定的两个文件的不同
    • diff3 - 比较3个文件不同的地方
    • diffstat - 显示diff命令输出信息的柱状图
    • dig - 域名查询工具
    • dircolors - 置ls命令在显示目录或文件时所用的色彩
    • dirname - 去除文件名中的非目录部分
    • dirs - 显示目录堆栈
    • disown - 从当前的shell中移除作业
    • dmesg - 显示Linux系统启动信息
    • dmidecode - 在Linux系统下获取有关硬件方面的信息
    • dnf - 新一代的RPM软件包管理器
    • dnsdomainname - 定义DNS系统中FQDN名称的域名
    • domainname - 显示和设置系统的NIS域名
    • dos2unix - 将DOS格式文本文件转换成Unix格式
    • dpkg-deb - Debian Linux下的软件包管理工具
    • dpkg-divert - Debian Linux中创建并管理一个转向列表
    • dpkg-preconfigure - Debian Linux中软件包安装之前询问问题
    • dpkg-query - Debian Linux中软件包的查询工具
    • dpkg-reconfigure - Debian Linux中重新配制一个已经安装的软件包
    • dpkg-split - Debian Linux中将大软件包分割成小包
    • dpkg-statoverride - Debian Linux中覆盖文件的所有权和模式
    • dpkg-trigger - Debian Linux下的软件包触发器
    • dpkg - Debian Linux系统上安装、创建和管理软件包
    • dris - 显示和清空目录堆栈中的内容
    • dstat - 通用的系统资源统计工具
    • du - 显示每个文件和目录的磁盘使用空间
    • dump - 用于备份ext2或者ext3文件系统
    • e2fsck - 用于检查第二扩展文件系统的完整性
    • e2label - 设置第二扩展文件系统的卷标
    • echo - 输出指定的字符串或者变量
    • ed - 单行纯文本编辑器
    • edquota - 用于编辑指定用户或工作组磁盘配额
    • egrep - 在文件内查找指定的字符串
    • eject - 用来退出抽取式设备
    • elinks - 纯文本界面的WWW浏览器
    • elm - 纯文本邮件客户端程序
    • emacs - 功能强大的全屏文本编辑器
    • enable - 启动或禁用shell内建命令
    • env - 显示系统中已存在的环境变量
    • ethtool - 显示或修改以太网卡的配置信息
    • ex - 启动vim编辑器的ex编辑模式
    • exec - 调用并执行指定的命令
    • exit - 退出当前的shell
    • expand - 将文件的制表符转换为空白字符
    • export - 为shell变量或函数设置导出属性
    • exportfs - 管理NFS共享文件系统列表
    • expr - 一款表达式计算工具
    • false - 返回状态为失败
    • fc - 显示历史列表中的命令或修改指定的历史命令并执行
    • fdisk - 查看磁盘使用情况和磁盘分区
    • fg - 将后台作业移动到前台终端运行
    • fgrep - 为文件搜索文字字符串
    • file - 用来探测给定文件的类型
    • find - 在指定目录下查找文件
    • findfs - 标签或UUID查找文件系统
    • finger - 用于查找并显示用户信息
    • firewall-cmd - Linux上新用的防火墙软件,跟iptables差不多的工具
    • fishshell - 比 bash 更好用的 shell
    • fmt - 读取文件后优化处理并输出
    • fold - 控制文件内容输出时所占用的屏幕宽度
    • fping - fping检测主机是否存在
    • free - 显示内存的使用情况
    • fsck - 检查并且试图修复文件系统中的错误
    • ftp - 用来设置文件系统相关功能
    • ftpcount - 显示目前已FTP登入的用户人数
    • ftpshut - 在指定的时间关闭FTP服务器
    • ftptop - proftpd服务器的连接状态
    • ftpwho - 显示当前每个ftp会话信息
    • fuser - 使用文件或文件结构识别进程
    • gcc - 基于C/C++的编译器
    • gcov - 测试程序的代码覆盖率的工具
    • gdb - 功能强大的程序调试器
    • get_module - 获取Linux内核模块的详细信息
    • getenforce - 显示当前SELinux的应用模式,是强制、执行还是停用
    • getsebool - 查询SElinux策略内各项规则的布尔值
    • git - 是目前世界上最先进的分布式版本控制系统
    • gpasswd - Linux下工作组文件的管理工具
    • gpm - 提供文字模式下的滑鼠事件处理
    • grep - 强大的文本搜索工具
    • groupadd - 用于创建一个新的工作组
    • groupdel - 用于删除指定的工作组
    • groupmod - 更改群组识别码或名称
    • groups - 用来打印指定用户所属的工作组
    • grpck - 用于验证组文件的完整性
    • grpconv - 用来开启群组的投影密码
    • grpunconv - 用来关闭群组的投影密码
    • grub - 多重引导程序grub的命令行shell工具
    • gunzip - 用来解压缩文件
    • gzexe - 用来压缩可执行文件
    • gzip - 用来压缩文件
    • halt - 关闭正在运行的Linux操作系统
    • hdparm - 显示与设定硬盘的参数
    • head - 显示文件的开头部分
    • help - 该命令是bash内建命令,用于显示bash内建命令的帮助信息
    • hexdump - 显示文件十六进制格式
    • history - 显示或操作历史列表
    • host - 常用的分析域名查询工具
    • hostid - 用来打印当前主机的数字化标识
    • hostname - 显示和设置系统的主机名
    • hping3 - 测试网络及主机的安全
    • htdigest - Apache服务器内置工具
    • htop - 非内部命令一个互动的进程查看器,可以动态观察系统进程状况
    • htpasswd - apache服务器创建密码认证文件
    • hwclock - 显示与设定硬件时钟
    • iconv - 转换文件的编码方式
    • id - 显示用户的ID以及所属群组的ID
    • ifcfg - 置Linux中的网络接口参数
    • ifconfig - 配置和显示Linux系统网卡的网络参数
    • ifdown - 禁用指定的网络接口
    • ifstat - 统计网络接口流量状态
    • iftop - 一款实时流量监控工具
    • ifup - 激活指定的网络接口
    • indent - 格式化C语言的源文件
    • info - Linux下info格式的帮助指令
    • init - init进程是所有Linux进程的父进程
    • inotifywait - 异步文件系统监控机制
    • insmod - 将给定的模块加载到内核中
    • install - 安装或升级软件或备份数据
    • iostat - 监视系统输入输出设备和CPU的使用情况
    • iotop - 用来监视磁盘I/O使用状况的工具
    • ip - 网络配置工具
    • ip6tables-restore - 还原ip6tables表
    • ip6tables-save - 保存ip6tables表配置
    • ip6tables - linux中防火墙软件
    • ipcalc - 简单的IP地址计算器
    • ipcrm - 删除消息队列、信号集、或者共享内存标识
    • ipcs - 分析消息队列共享内存和信号量
    • iperf - 网络性能测试工具
    • iptables-restore - 还原iptables表的配置
    • iptables-save - 备份iptables的表配置
    • iptables - Linux上常用的防火墙软件
    • iptraf - 实时地监视网卡流量
    • iptstate - 显示iptables的工作状态
    • ispell - 检查文件中出现的拼写错误
    • jed - 主要用于编辑代码的编辑器
    • jobs - 显示作业的状态
    • joe - 强大的纯文本编辑器
    • join - 两个文件中指定栏位内容相同的行连接起来
    • jwhois - whois 客户端服务
    • kernelversion - 打印当前内核的主版本号
    • kexec - 从当前正在运行的内核引导到一个新内核
    • kill - 发送信号到进程
    • killall - 使用进程的名称来杀死一组进程
    • last - 列出目前与过去登入系统的用户相关信息
    • lastb - 列出登入系统失败的用户相关信息
    • lastlog - 显示系统中所有用户最近一次登录信息
    • ld - 将目标文件连接为可执行程序
    • ldconfig - 动态链接库管理命令
    • ldd - 打印程序或者库文件所依赖的共享库列表
    • less - 分屏上下翻页浏览文件内容
    • let - 简单的计算器,执行算术表达式
    • lftp - 优秀的文件客户端程序
    • lftpget - 调用lftp指令下载指定的文件
    • lha - 压缩或解压缩lzh格式文件
    • lilo - 安装核心载入开机管理程序
    • ln - 用来为文件创建链接
    • lnstat - 显示Linux系统的网路状态
    • local - 在函数内定义局部变量
    • locate - 比 find 好用的文件查找工具
    • logger - 在系统日志中记录相应条目
    • login - 登录系统或切换用户身份
    • logname - 用来显示用户名称
    • logout - 退出当前登录的Shell
    • logrotate - 系统日志进行轮转、压缩和删除
    • logsave - 将命令的输出信息保存到指定的日志文件
    • logwatch - 可定制和可插入式的日志监视系统
    • look - 显示文件中以指定字符串开头的任意行
    • losetup - 设定与控制循环(loop)设备
    • lp - 打印文件或修改排队的打印任务
    • lpadmin - 配置CUPS套件中的打印机和类
    • lpc - 命令行方式打印机控制程序
    • lpq - 显示打印队列中的打印任务的状态信息
    • lpr - 将文件发送给指定打印机进行打印
    • lprm - 删除打印队列中的打印任务
    • lpstat - 显示CUPS中打印机的状态信息
    • ls - 显示目录内容列表
    • lsattr - 查看文件的第二扩展文件系统属性
    • lsb_release - 显示发行版本信息
    • lsblk - 列出块设备信息
    • lscpu - 显示有关CPU架构的信息
    • lsmod - 显示已载入系统的模块
    • lsof - 显示Linux系统当前已打开的所有文件列表 lsof -p pid
    • lspci - 显示当前主机的所有PCI总线信息
    • lsusb - 显示本机的USB设备列表信息
    • ltrace - 用来跟踪进程调用库函数的情况
    • lvcreate - 用于创建LVM的逻辑卷
    • lvdisplay - 显示逻辑卷属性
    • lvextend - 扩展逻辑卷空间
    • lvreduce - 收缩逻辑卷空间
    • lvremove - 删除指定LVM逻辑卷
    • lvresize - 调整逻辑卷空间大小
    • lvscan - 扫描逻辑卷
    • lynx - 纯文本模式的网页浏览器
    • mail - 命令行下发送和接收电子邮件
    • mailq - 显示待发送的邮件队列
    • mailstat - 显示到达的邮件状态
    • make - GNU的工程化编译工具
    • man - 查看Linux中的指令帮助
    • mapfile - 从标准输入读取行并赋值到数组
    • md5sum - 计算和校验文件报文摘要的工具程序
    • mesg - 设置当前终端的写权限
    • mii-tool - 配置网络设备协商方式的工具
    • mkbootdisk - 可建立目前系统的启动盘
    • mkdir - 用来创建目录
    • mke2fs - 创建磁盘分区上的“etc2/etc3”文件系统
    • mkfs - 用于在设备上创建Linux文件系统
    • mkinitrd - 建立要载入ramdisk的映像文件
    • mkisofs - 建立ISO 9660映像文件
    • mknod - 创建字符设备文件和块设备文件
    • mkswap - 建立和设置SWAP交换分区
    • mktemp - 创建临时文件供shell脚本使用
    • modprobe - 自动处理可载入模块
    • more - 显示文件内容,每次显示一屏
    • mount - 用于挂载Linux系统外的文件
    • mpstat - 显示各个可用CPU的状态
    • mtools - 显示mtools支持的指令
    • mv - 用来对文件或目录重新命名
    • mysql - MySQL服务器客户端工具
    • mysqladmin - MySQL服务器管理客户端
    • mysqldump - MySQL数据库中备份工具
    • mysqlimport - 为MySQL服务器用命令行方式导入数据
    • mysqlshow - 显示MySQL中数据库相关信息
    • named-checkzone - 使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称
    • nano - 字符终端文本编辑器
    • nc - 用于设置路由器,是网络工具中的瑞士军刀
    • ncftp - 是增强的的FTP工具
    • nethogs - 终端下的网络流量监控工具
    • netstat - 查看Linux中网络系统状态信息
    • newusers - 用于批处理的方式一次创建多个命令
    • nfsstat - 列出NFS客户端和服务器的工作状态
    • ngrep - 方便的数据包匹配和显示工具
    • nice - 改变程序执行的优先权等级
    • nisdomainname - 显示主机NIS的域名
    • nl - 为每一个文件添加行号
    • nm - 显示二进制目标文件的符号表
    • nmap - 网络探测和安全审核
    • nmcli - 地址配置工具
    • nohup - 将程序以忽略挂起信号的方式运行起来
    • nologin - 拒绝用户登录系统
    • nslookup - 查询域名DNS信息的工具
    • ntpdate - 使用网络计时协议(NTP)设置日期和时间
    • ntsysv - 集中管理系统的各种服务
    • objdump - 显示二进制文件信息
    • od - 输出文件的八进制、十六进制等格式编码的字节
    • openssl - 强大的安全套接字层密码库
    • parted - 磁盘分区和分区大小调整工具
    • partprobe - 不重启的情况下重读分区
    • passwd - 用于让用户可以更改自己的密码
    • paste - 将多个文件按列队列合并
    • patch - 为开放源代码软件安装补丁程序
    • pathchk - 检查文件中不可移植的部分
    • perl - perl语言解释器
    • pfctl - PF防火墙的配置命令
    • pgrep - 根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)
    • php - PHP语言的命令行接口
    • pico - 功能强大全屏幕的文本编辑器
    • pidof - 查找指定名称的进程的进程号ID号
    • pigz - 可以用来解压缩文件,gzip的并行实现升级版
    • ping - 测试主机之间网络的连通性
    • pkill - 可以按照进程名杀死进程
    • pmap - 报告进程的内存映射关系
    • popd - 从目录堆栈中删除目录
    • poweroff - 关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中
    • ppp-off - 关闭ppp连线
    • pr - 将文本文件转换成适合打印的格式
    • printf - 格式化并输出结果
    • protoize - GNU-C代码转换为ANSI-C代码
    • ps - 报告当前系统的进程状态
    • pssh - 批量管理执行
    • pstack - 显示每个进程的栈跟踪
    • pstree - 以树状图的方式展现进程之间的派生关系
    • pushd - 将目录添加到目录堆栈顶部
    • pv - 显示当前在命令行执行的命令的进度信息,管道查看器
    • pvchange - 修改物理卷属性
    • pvck - 检测物理卷的LVM元数据的一致性
    • pvcreate - 将物理硬盘分区初始化为物理卷
    • pvdisplay - 显示物理卷的属性
    • pvremove - 删除一个存在的物理卷
    • pvs - 输出物理卷信息报表
    • pvscan - 扫描系统中所有硬盘的物理卷列表
    • pwck - 用来验证系统认证文件内容和格式的完整性
    • pwconv - 用来开启用户的投影密码
    • pwd - 显示当前工作目录
    • pwunconv - 用来关闭用户的投影密码
    • quota - 显示磁盘已使用的空间与限制
    • quotacheck - 检查磁盘的使用空间与限制
    • quotaoff - 关闭Linux内核中指定文件系统的磁盘配额功能
    • quotaon - 激活Linux内核中指定文件系统的磁盘配额功能
    • rcconf - Debian Linux下的运行等级服务配置工具
    • rcp - 使在两台Linux主机之间的文件复制操作更简单
    • read - 从键盘读取变量值
    • readelf - 用于显示elf格式文件的信息
    • readonly - 标记shell变量或函数为只读
    • reboot - 重新启动正在运行的Linux操作系统
    • reject - 指示打印系统拒绝发往指定目标打印机的打印任务
    • rename - 用字符串替换的方式批量改变文件名
    • renice - 修改正在运行的进程的调度优先级
    • repquota - 报表的格式输出磁盘空间限制的状态
    • resize - 命令设置终端机视窗的大小
    • restore - 所进行的操作和dump指令相反
    • restorecon - 恢复文件的安全上下文
    • return - 从函数中退出并返回数值
    • rev - 将文件内容以字符为单位反序输出
    • rexec - 运程执行Linux系统下命令
    • rlogin - 从当前终端登录到远程Linux主机
    • rm - 用于删除给定的文件和目录
    • rmdir - 用来删除空目录
    • rmmod - 从运行的内核中移除指定的内核模块
    • route - 显示并设置Linux中静态路由表
    • rpm - RPM软件包的管理工具
    • rpm2cpio - 将RPM软件包转换为cpio格式的文件
    • rpmbuild - 创建RPM的二进制软件包和源码软件包
    • rpmdb - 初始化和重建RPM数据库
    • rpmquery - 从RPM数据库中查询软件包信息
    • rpmsign - 使用RPM软件包的签名管理工具
    • rpmverify - 验证已安装的RPM软件包的正确性
    • rsh - 连接远程主机并执行命令
    • rsync - 远程数据同步工具
    • runlevel - 打印当前Linux系统的运行等级
    • sar - 系统运行状态统计工具
    • scp - 加密的方式在本地主机和远程主机之间复制文件
    • screen - 用于命令行终端切换
    • sed - 功能强大的流式文本编辑器
    • seinfo - 查询SELinux的策略提供多少相关规则
    • semanage - 默认目录的安全上下文查询与修改
    • sendmail - 著名电子邮件服务器
    • seq - 以指定增量从首数开始打印数字到尾数
    • service - 控制系统服务的实用工具
    • sesearch - 查询SELinux策略的规则详情
    • set - 显示或设置shell特性及shell变量
    • setfacl - 设置文件访问控制列表
    • setpci - 查询和配置PCI设备的使用工具
    • setsebool - 修改SElinux策略内各项规则的布尔值
    • setsid - 在新的会话中运行程序
    • sftp-server - sftp协议的服务器端程序
    • sftp - 交互式的文件传输程序
    • sh - shell命令解释器
    • shift - 移动位置参数
    • shopt - 显示和设置shell操作选项
    • showmount - 显示NFS服务器加载的信息
    • shuf - 产生随机的排列
    • shutdown - 用来执行系统关机的命令
    • skill - 向选定的进程发送信号冻结进程
    • slabtop - 实时显示内核slab内存缓存信息
    • sleep - 将目前动作延迟一段时间
    • slocate - 命令查找文件或目录
    • smbclient - 交互方式访问samba服务器
    • smbpasswd - samba用户和密码管理工具
    • sort - 对文本文件中所有行进行排序
    • source - 在当前Shell环境中从指定文件读取和执行命令
    • speedtest-cli - 命令行下测试服务器外网速度
    • spell - 对文件进行拼写检查
    • split - 分割任意大小的文件
    • squid - squid服务器守护进程
    • squidclient - squid服务器的客户端管理工具
    • ss - 比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息
    • ssh-add - 把专用密钥添加到ssh-agent的高速缓存中
    • ssh-agent - ssh密钥管理器
    • ssh-copy-id - 把本地的ssh公钥文件安装到远程主机对应的账户下
    • ssh-keygen - 为ssh生成、管理和转换认证密钥
    • ssh-keyscan - 收集主机公钥的使用工具
    • ssh - openssh套件中的客户端连接工具
    • sshd - openssh软件套件中的服务器守护进程
    • startx - 用来启动X Window
    • stat - 用于显示文件的状态信息
    • strace - 跟踪系统调用和信号
    • strings - 在对象文件或二进制文件中查找可打印的字符串
    • stty - 修改终端命令行的相关设置
    • su - 用于切换当前用户身份到其他用户身份
    • sudo - 以其他身份来执行命令
    • sum - 计算文件的校验码和显示块数
    • supervisord - 配置后台服务/常驻进程的进程管家工具
    • suspend - 挂起shell的执行
    • swapoff - 关闭指定的交换空间
    • swapon - 激活Linux系统中交换空间
    • sync - 用于强制被改变的内容立刻写入磁盘
    • sysctl - 时动态地修改内核的运行参数
    • syslog - 系统默认的日志守护进程
    • systemctl - 系统服务管理器指令
    • systool - 显示基于总线、类和拓扑显示系统中设备的信息
    • tac - 连接多个文件并以行为单位反向打印到标准输出
    • tail - 在屏幕上显示指定文件的末尾若干行
    • tailf - 在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出
    • talk - 让用户和其他用户聊天
    • tar - Linux下的归档使用工具,用来打包和备份
    • tcpdump - 一款sniffer工具,是Linux上的抓包工具,嗅探器
    • tcpreplay - 将PCAP包重新发送,用于性能或者功能测试
    • tee - 从标准输入读取数据并重定向到标准输出和文件。
    • telint - 切换当前正在运行系统的运行等级
    • telnet - 登录远程主机和管理(测试ip端口是否连通)
    • tempfile - shell中给临时文件命名
    • test - shell环境中测试条件表达式工具
    • tftp - 在本机和tftp服务器之间使用TFTP协议传输文件
    • time - 统计给定命令所花费的总时间
    • times - 显示进程累计时间
    • tload - 显示系统负载状况
    • tmux - Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权
    • top - 显示或管理执行中的程序
    • touch - 创建新的空文件
    • tput - 通过terminfo数据库对终端会话进行初始化和操作
    • tr - 将字符进行替换压缩和删除
    • tracepath - 追踪目的主机经过的路由信息
    • traceroute - 显示数据包到主机间的路径
    • trap - 指定在接收到信号后将要采取的动作
    • tree - 树状图列出目录的内容
    • true - 返回状态为成功
    • tty - 显示连接到当前标准输入的终端设备文件名
    • type - 显示指定命令的类型
    • ulimit - 控制shell程序的资源
    • umask - 显示或设置创建文件的权限掩码
    • umount - 用于卸载已经加载的文件系统
    • unalias - 删除由alias设置的别名
    • uname - 显示Linux系统信息
    • unarj - 解压缩由arj命令创建的压缩包
    • uncompress - 用来解压.Z文件
    • unexpand - 将文件的空白字符转换为制表符
    • uniq - 显示或忽略重复的行
    • unlink - 系统调用函数unlink去删除指定的文件
    • unprotoize - 删除C语言源代码文件中的函数原型
    • unrar - 解压rar文件命令,从rar档案中提取文件
    • unset - 删除指定的shell变量或函数
    • unzip - 用于解压缩由zip命令压缩的压缩包
    • updatedb - 创建或更新slocate命令所必需的数据库文件
    • uptime - 查看Linux系统负载信息
    • useradd - 创建的新的系统用户
    • userdel - 用于删除给定的用户以及与用户相关的文件
    • usermod - 用于修改用户的基本信息
    • usernetctl - 被允许时操作指定的网络接口
    • users - 显示当前登录系统的所有用户
    • uucico - UUCP文件传输服务程序
    • uupick - 命令处理传送进来的文件
    • uuto - 将文件传送到远端的UUCP主机
    • vdfuse - VirtualBox软件挂载VDI分区文件工具
    • vgchange - 修改卷组属性
    • vgconvert - 转换卷组元数据格式
    • vgcreate - 用于创建LVM卷组
    • vgdisplay - 显示LVM卷组的信息
    • vgextend - 向卷组中添加物理卷
    • vgreduce - 从卷组中删除物理卷
    • vgremove - 用于用户删除LVM卷组
    • vgrename - 使用vgrename命令可以重命名卷组的名称
    • vgscan - 扫描并显示系统中的卷组
    • vi - 功能强大的纯文本编辑器
    • vmstat - 显示虚拟内存状态
    • volname - 显示指定的ISO-9660格式的设备的卷名称
    • w - 显示目前登入系统的用户信息
    • wait - 等待进程执行完后返回
    • wall - 向系统当前所有打开的终端上输出信息
    • watch - 可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令
    • wc - 统计文件的字节数、字数、行数
    • wget - Linux系统下载文件工具
    • whatis - 查询一个命令执行什么功能
    • whereis - 查找二进制程序、代码等相关文件路径
    • which - 查找并显示给定命令的绝对路径
    • who - 显示目前登录系统的用户信息
    • whoami - 打印当前有效的用户名称
    • write - 向指定登录用户终端上发送信息
    • xargs - 给其他命令传递参数的一个过滤器
    • xauth - 显示和编辑被用于连接X服务器的认证信息
    • xclip - 管理 X 粘贴板
    • xhost - 制哪些X客户端能够在X服务器上显示
    • xinit - 是Linux下X-Window系统的初始化程序
    • xlsatoms - 列出X服务器内部所有定义的原子成分
    • xlsclients - 列出显示器中的客户端应用程序
    • xlsfonts - 列出X Server使用的字体
    • xset - 设置X-Window系统中的用户爱好的实用工具
    • xz - POSIX 平台开发具有高压缩率的工具
    • yes - 重复打印指定字符串
    • ypdomainname - 显示主机的NIS的域名
    • yum - 基于RPM的软件包管理器
    • zcat - 显示压缩包中文件的内容
    • zfore - 强制为gzip格式的压缩文件添加.gz后缀
    • zip - 可以用来解压缩文件
    • zipinfo - 用来列出压缩文件信息
    • zipsplit - 将较大的zip压缩包分割成各个较小的压缩包
    • znew - 将.Z压缩包重新转化为gzip命令压缩的.gz压缩包
Powered by GitBook
On this page
  • 补充说明
  • awk命令格式和选项
  • awk模式和操作
  • 模式
  • 操作
  • awk脚本基本结构
  • awk的工作原理
  • awk内置变量(预定义变量)
  • 将外部变量值传递给awk
  • 查找进程pid
  • awk运算与判断
  • 算术运算符
  • 赋值运算符
  • 逻辑运算符
  • 正则运算符
  • 关系运算符
  • 其它运算符
  • 运算级优先级表
  • awk高级输入输出
  • 读取下一条记录
  • 简单地读取一条记录
  • 关闭文件
  • 输出到一个文件
  • 设置字段定界符
  • 流程控制语句
  • 条件判断语句
  • 循环语句
  • # while语句
  • # for循环
  • # do循环
  • 其他语句
  • 数组应用
  • 数组的定义
  • 数组相关函数
  • 二维、多维数组使用
  • 内置函数
  • 算术函数
  • 字符串函数
  • 一般函数
  • 时间函数

Was this helpful?

  1. Linux

awk - 文本和数据进行处理的编程语言

文本和数据进行处理的编程语言

补充说明

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

awk命令格式和选项

语法形式

awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)

常用命令选项

  • -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:

  • -v var=value 赋值一个用户定义变量,将外部变量传递给awk

  • -f scripfile 从脚本文件中读取awk命令

  • -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

awk模式和操作

awk脚本是由模式和操作组成的。

模式

模式可以是以下任意一个:

  • /正则表达式/:使用通配符的扩展集。

  • 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。

  • 模式匹配表达式:用运算符~(匹配)和!~(不匹配)。

  • BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理

操作

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:

  • 变量或数组赋值

  • 输出命令

  • 内置函数

  • 控制流语句

awk脚本基本结构

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 单引号 或 双引号 中,例如:

awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

awk的工作原理

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
  • 第一步:执行BEGIN{ commands }语句块中的语句;

  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

  • 第三步:当读至输入流末尾时,执行END{ commands }语句块。

    BEGIN语句块 在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

    END语句块 在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

    pattern语句块 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

    示例

echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
Start
A line 1
A line 2
End

当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' 
v1 v2 v3

双引号拼接使用:

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3

{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。

awk内置变量(预定义变量)

说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

 **$n**  当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 
 **$0**  这个变量包含执行过程中当前行的文本内容。
[N]  **ARGC**  命令行参数的数目。
[G]  **ARGIND**  命令行中当前文件的位置(从0开始算)。
[N]  **ARGV**  包含命令行参数的数组。
[G]  **CONVFMT**  数字转换格式(默认值为%.6g)。
[P]  **ENVIRON**  环境变量关联数组。
[N]  **ERRNO**  最后一个系统错误的描述。
[G]  **FIELDWIDTHS**  字段宽度列表(用空格键分隔)。
[A]  **FILENAME**  当前输入文件的名。
[P]  **FNR**  同NR,但相对于当前文件。
[A]  **FS**  字段分隔符(默认是任何空格)。
[G]  **IGNORECASE**  如果为真,则进行忽略大小写的匹配。
[A]  **NF**  表示字段数,在执行过程中对应于当前的字段数。
[A]  **NR**  表示记录数,在执行过程中对应于当前的行号。
[A]  **OFMT**  数字的输出格式(默认值是%.6g)。
[A]  **OFS**  输出字段分隔符(默认值是一个空格)。
[A]  **ORS**  输出记录分隔符(默认值是一个换行符)。
[A]  **RS**  记录分隔符(默认是一个换行符)。
[N]  **RSTART**  由match函数所匹配的字符串的第一个位置。
[N]  **RLENGTH**  由match函数所匹配的字符串的长度。
[N]  **SUBSEP**  数组下标分隔符(默认值是34)。

示例

echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' 
Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

使用print $NF可以打印出一行中的最后一个字段,使用$(NF-1)则是打印倒数第二个字段,其他以此类推:

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'
f3
f5
echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'
f2
f4

打印每一行的第二和第三个字段:

awk '{ print $2,$3 }' filename

统计文件中的行数:

awk 'END{ print NR }' filename

以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。

一个每一行中第一个字段值累加的例子:

seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' 
总和:
1+
2+
3+
4+
5+
等于
15

将外部变量值传递给awk

借助 -v选项 ,可以将外部值(并非来自stdin)传递给awk:

VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'

另一种传递外部变量方法:

var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2

当输入来自于文件时使用:

awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename

以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。

查找进程pid

netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'

awk运算与判断

作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和!~(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。

算术运算符

运算符

描述

+ -

加,减

* / &

乘,除与求余

+ - !

一元加,减和逻辑非

^ *

求幂

++ --

增加或减少,作为前缀或后缀

例:

awk 'BEGIN{a="b";print a++,++a;}'
0 2

注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0

赋值运算符

运算符

描述

= += -= = /= %= ^= *=

赋值语句

例:

a+=5; 等价于:a=a+5; 其它同类

逻辑运算符

运算符

描述

\|\|

逻辑或

&&

逻辑与

例:

awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
0 1

正则运算符

运算符

描述

~ !~

匹配正则表达式和不匹配正则表达式

例:

awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok

关系运算符

运算符

描述

< <= > >= != ==

关系运算符

例:

awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'
ok

注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。

其它运算符

运算符

描述

$

字段引用

空格

字符串连接符

?:

C条件表达式

in

数组中是否存在某键值

例:

awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'
ok
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'
0
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
1

运算级优先级表

!级别越高越优先 级别越高越优先

awk高级输入输出

读取下一条记录

awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并:

cat text.txt
a
b
c
d
e

awk 'NR%2==1{next}{print NR,$0;}' text.txt
2 b
4 d

当记录行号除以2余1,就跳过当前行。下面的print NR,$0也不会执行。下一行开始,程序有开始判断NR%2值。这个时候记录行号是:2 ,就会执行下面语句块:'print NR,$0'

分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行:

cat text.txt
web01[192.168.2.100]
httpd            ok
tomcat               ok
sendmail               ok
web02[192.168.2.101]
httpd            ok
postfix               ok
web03[192.168.2.102]
mysqld            ok
httpd               ok
0
awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt
web01[192.168.2.100]:   httpd            ok
web01[192.168.2.100]:   tomcat               ok
web01[192.168.2.100]:   sendmail               ok
web02[192.168.2.101]:   httpd            ok
web02[192.168.2.101]:   postfix               ok
web03[192.168.2.102]:   mysqld            ok
web03[192.168.2.102]:   httpd               ok

简单地读取一条记录

awk getline用法:输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。

getline语法:getline var,变量var包含了特定行的内容。

awk getline从整体上来说,用法说明:

  • 当其左右无重定向符|或<时: getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。

  • 当其左右有重定向符|或<时: getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。

示例:

执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量out,并打印它:

awk 'BEGIN{ "date" | getline out; print out }' test

执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素:

awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test

命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。

awk 'BEGIN{ while( "ls" | getline) print }'

关闭文件

awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。

close("filename")

filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。

输出到一个文件

awk中允许用如下方式将结果输出到一个文件:

echo | awk '{printf("hello word!n") > "datafile"}'
# 或
echo | awk '{printf("hello word!n") >> "datafile"}'

设置字段定界符

默认的字段定界符是空格,可以使用-F "定界符" 明确指定一个定界符:

awk -F: '{ print $NF }' /etc/passwd
# 或
awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd

在BEGIN语句块中则可以用OFS=“定界符”设置输出字段的定界符。

流程控制语句

在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。

条件判断语句

if(表达式)
  语句1
else
  语句2

格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为:

if(表达式)
  {语句1}
else if(表达式)
  {语句2}
else
  {语句3}

示例:

awk 'BEGIN{
test=100;
if(test>90){
  print "very good";
  }
  else if(test>60){
    print "good";
  }
  else{
    print "no pass";
  }
}'

very good

每条命令语句后面可以用; 分号 结尾。

循环语句

# while语句

while(表达式)
  {语句}

示例:

awk 'BEGIN{
test=100;
total=0;
while(i<=test){
  total+=i;
  i++;
}
print total;
}'
5050

# for循环

for循环有两种格式:

格式1:

for(变量 in 数组)
  {语句}

示例:

awk 'BEGIN{
for(k in ENVIRON){
  print k"="ENVIRON[k];
}

}'
TERM=linux
G_BROKEN_FILENAMES=1
SHLVL=1
pwd=/root/text
...
logname=root
HOME=/root
SSH_CLIENT=192.168.1.21 53087 22

注:ENVIRON是awk常量,是子典型数组。

格式2:

for(变量;条件;表达式)
  {语句}

示例:

awk 'BEGIN{
total=0;
for(i=0;i<=100;i++){
  total+=i;
}
print total;
}'
5050

# do循环

do
{语句} while(条件)

例子:

awk 'BEGIN{ 
total=0;
i=0;
do {total+=i;i++;} while(i<=100)
  print total;
}'
5050

其他语句

  • break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。

  • continue 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。

  • next 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。

  • exit 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。

数组应用

数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。

数组的定义

数字做数组索引(下标):

Array[1]="sun"
Array[2]="kai"

字符串做数组索引(下标):

Array["first"]="www"
Array"[last"]="name"
Array["birth"]="1987"

使用中print Array[1]会打印出sun;使用print Array[2]会打印出kai;使用print["birth"]会得到1987。

读取数组的值

{ for(item in array) {print array[item]}; }       #输出的顺序是随机的
{ for(i=1;i<=len;i++) {print array[i]}; }         #Len是数组的长度

数组相关函数

得到数组长度:

awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4

length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。

awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}'
4

asort对数组进行排序,返回数组长度。

输出数组内容(无序,有序输出):

awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
2 is
3 a

for…in输出,因为数组是关联数组,默认是无序的。所以通过for…in得到是无序的数组。如果需要得到有序数组,需要通过下标获得。

awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'
1 it
2 is
3 a
4 test

注意:数组下标是从1开始,与C数组不一样。

判断键值存在以及删除键值:

# 错误的判断方法:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}' 
no found
a a1
b b1
c

以上出现奇怪问题,tB[“c”]没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。

# 正确判断方法:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}'  
a a1
b b1

if(key in array)通过这种方法判断数组中是否包含key键值。

#删除键值:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}'                     
b b1

delete array[key]可以删除,对应数组key的,序列值。

二维、多维数组使用

awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,4]=1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP(�34)作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2�344。

类似一维数组的成员测试,多维数组可以使用if ( (i,j) in array)这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。

awk 'BEGIN{
for(i=1;i<=9;i++){
  for(j=1;j<=9;j++){
    tarr[i,j]=i*j; print i,"*",j,"=",tarr[i,j];
  }
}
}'
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6 
...
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

可以通过array[k,k2]引用获得数组内容。

另一种方法:

awk 'BEGIN{
for(i=1;i<=9;i++){
  for(j=1;j<=9;j++){
    tarr[i,j]=i*j;
  }
}
for(m in tarr){
  split(m,tarr2,SUBSEP); print tarr2[1],"*",tarr2[2],"=",tarr[m];
}
}'

内置函数

awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。

算术函数

格式

描述

atan2( y, x )

返回 y/x 的反正切。

cos( x )

返回 x 的余弦;x 是弧度。

sin( x )

返回 x 的正弦;x 是弧度。

exp( x )

返回 x 幂函数。

log( x )

返回 x 的自然对数。

sqrt( x )

返回 x 平方根。

int( x )

返回 x 的截断至整数的值。

rand( )

返回任意数字 n,其中 0 <= n < 1。

srand( [expr] )

将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。

举例说明:

awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}'
0.841 22026.466 2.303 3

OFMT 设置输出数据格式是保留3位小数。

获得随机数:

awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
78
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
31
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
41

字符串函数

格式

描述

gsub( Ere, Repl, [ In ] )

除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。

sub( Ere, Repl, [ In ] )

用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。

index( String1, String2 )

在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。

length [(String)]

返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。

blength [(String)]

返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。

substr( String, M, [ N ] )

返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。

match( String, Ere )

在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。

split( String, A, [Ere] )

将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。

tolower( String )

返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。

toupper( String )

返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。

sprintf(Format, Expr, Expr, . . . )

根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。

注:Ere都可以是正则表达式。

gsub,sub使用

awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}'
this is a test!test!

在 info中查找满足正则表达式,/[0-9]+/ 用””替换,并且替换后的值,赋值给info 未给info值,默认是$0

查找字符串(index使用)

awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok

未找到,返回0

正则表达式匹配查找(match使用)

awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'
ok

截取字符串(substr使用)

[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes

从第 4个 字符开始,截取10个长度字符串

字符串分割(split使用)

awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
4
4 test
1 this
2 is
3 a

分割info,动态创建数组tA,这里比较有意思,awk for …in循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。

格式化字符串输出(sprintf使用)

格式化字符串格式:

其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

格式

描述

格式

描述

%d

十进制有符号整数

%u

十进制无符号整数

%f

浮点数

%s

字符串

%c

单个字符

%p

指针的值

%e

指数形式的浮点数

%x

%X 无符号以十六进制表示的整数

%o

无符号以八进制表示的整数

%g

自动选择合适的表示法

awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}'
124.11,18446744073709551615,1.2,7C,174

一般函数

格式

描述

close( Expression )

用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。

system(command )

执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。

Expression \| getline [ Variable ]

从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。

getline [ Variable ] < Expression

从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。

getline [ Variable ]

将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。

打开外部文件(close用法)

awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

逐行读取外部文件(getline使用方法)

awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo

调用外部应用程序(system使用方法)

awk 'BEGIN{b=system("ls -al");print b;}'
total 42092
drwxr-xr-x 14 chengmo chengmo     4096 09-30 17:47 .
drwxr-xr-x 95 root   root       4096 10-08 14:01 ..

b返回值,是执行结果。

时间函数

格式

描述

函数名

说明

mktime( YYYY MM dd HH MM ss[ DST])

生成时间格式

strftime([format [, timestamp]])

格式化时间输出,将时间戳转为时间字符串具体格式,见下表。

systime()

得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数

建指定时间(mktime使用)

awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
2001年01月01日 星期一 12时12分12秒
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
2634468

求2个时间段中间时间差,介绍了strftime使用方法

awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}' 
308201392

strftime日期和时间格式说明符

格式

描述

%a

星期几的缩写(Sun)

%A

星期几的完整写法(Sunday)

%b

月名的缩写(Oct)

%B

月名的完整写法(October)

%c

本地日期和时间

%d

十进制日期

%D

日期 08/20/99

%e

日期,如果只有一位会补上一个空格

%H

用十进制表示24小时格式的小时

%I

用十进制表示12小时格式的小时

%j

从1月1日起一年中的第几天

%m

十进制表示的月份

%M

十进制表示的分钟

%p

12小时表示法(AM/PM)

%S

十进制表示的秒

%U

十进制表示的一年中的第几个星期(星期天作为一个星期的开始)

%w

十进制表示的星期几(星期天是0)

%W

十进制表示的一年中的第几个星期(星期一作为一个星期的开始)

%x

重新设置本地日期(08/20/99)

%X

重新设置本地时间(12:00:00)

%y

两位数字表示的年(99)

%Y

当前月份

%%

百分号(%)

Previousatrm - 删除待执行任务队列中的指定任务Nextaxel - 多线程下载工具

Last updated 5 years ago

Was this helpful?