linux awk命令详解、linux awk命令
Linux常用操作指令
Linux netstat命令详解
grep 、sed、awk被称为linux中的"三剑客"。
我们总结一下这三个"剑客"的特长。
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
awk
样式扫描和处理语言
允许您创建简短的程序
它适合文本处理和报表生成
读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能
awk '{pattern + action}' {filenames}
pattern 表示 AWK 在数据中查找的内容
action 是在找到匹配内容时所执行的一系列命令
花括号{}不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组
pattern表示要匹配的正则表达式,用斜杠括起来
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,
awk抽取信息后,才能进行其他文本操作。
完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。逐行匹配处理
awk [-F|-f|-v] `BEGIN{} //{command1; command2} END{}` file
[-F|-f|-v] 参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
' ' 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
echo $[3*5] 直接输出结算结果15、$[]只能进行整数运算
echo $((3*5)) 将数学运算表达式放在((和))之间、$获取(( ))命令的结果
echo let c=a*b #let 命令也只能进行整数运算
#===================
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限
User拥有者、Group用户组、Other其他人、All所有人
u、g、o、a
r可读取,w可写入,x可执行
r=4,w=2,x=1
#===================
chmod a=rwx file # 给所有人设置权限
chmod u=rwx file
chmod g=rwx file
chmod o=rwx file
chmod 777 file
$0 当前脚本的文件名、
$n (n≥1) 传递给脚本或函数的参数
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数
$? 获取上个命令的退出状态、或函数的返回值
$$ 当前shell的进程 ID
"$*" 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据
"$@" 仍然将每个参数都看作一份数据,彼此之间是独立的
type 命令用来显示指定命令的类型是否为内建类型
echo 用于字符串的输出
printf [format] [文本1] [文本2] 格式化输出
echo $- 查看变量-的值,如果值中包含了字母i,则表示交互式(interactive)
echo $PS1 查看变量PS1的值、非空则为交互式、否则为非交互式、因为非交互式会清空该变量
echo $$ 检测是否在当前 Shell 进程中、输出当前进程PID
shopt login_shell 判断 Shell 是否为登录式、on为登陆、off非登陆
echo $PS1; shopt login_shell # 同时判断交互式、登录式
read hello # 监听读取输入
echo $hello # 输出变量的值
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
ifconfig
ifconfig |grep inet
netstat -anp|grep :22
service sshd start 启动ssh服务
service iptables stop 关闭防火墙
service iptables status 查看防火墙是否关闭
awk命令
不使用分隔符、默认使用空格作为分隔符、多个连续空格会自动视为一个分隔符
awk是逐行进行处理的、如果没有指定分隔符、默认使用空格作为分隔符
$0 表示显示整行
$NF 表示最后一个字段
NF表示当前行一共有几个字段、是统计数字
$1、$2这种内置变量不需要使用双引号、否则会被当中文本处理
awk '{print $1 $2}' test.txt // 以空格作为风隔符、输出第1列、第2列、
awk '{print $1,$2}' test.txt // 以空格作为风隔符、输出第1列、第2列、
awk '{print $1,$2,$3}' test.txt
awk '{print "PID:" $1}' test.txt // 同时打印字符串"PID"和$1变量的值
awk '{print "PID:" $1, "COMMOND:" $2}' test.txt // 可以组合很多
BEGIN模式表示、在处理指定文本之前执行的动作
awk 'BEGIN{print "开始"} {print $1}' test.txt
END模式就是在处理玩所有的动作之后、需要执行的动作
awk '{print $2} END{print "结束啦"}' test.txt
awk分隔符
输入分隔符
FS、field separator
默认分隔符是空格、多个连续空格会自动视为单个空格分隔符
输出风隔符
OFS、output field separator
输出在屏幕上的时候、默认输出风隔符也是空格
awk -F# '{print $1,$2}' test.txt // 通过#号作为分隔符
awk -v FS="," '{print $2}' test.txt // 通过,逗号作为分隔符
`输出分隔符就是输出显示在屏幕时各个变量值之间的分隔符`
awk -v OFS="+++" '{print $1,$2}' test.txt // 通过+++号作为输出风隔分隔符
awk '{print $1 $2}' test.txt // 表示每行风隔后、将第一列和第二列连接在一起合并输出
awk '{print $1,$2}' test.txt // 表示每行风隔后、将第一列和第二列输出风格符隔开输出
awk变量
FS 输入字段分隔符、默认空格
OFS 输出字段分隔符、默认空格
RS 输入换行分隔符、默认换行符
ORS 输出换行风隔符 、默认换行符
NF 当前行字段个数、字段数量 Number of Fileds
FNR 各个文件分别计数的行数
NR 当前处理的行是第几行 Number of Record
awk格式化
awk '{print $1,$2}' test.txt // 会进行换行
awk '{printf $1,$2}' test.txt // 不会进行换行、文本输出在一行里面
awk '{printf "文本信息: %s\n", $3}' test.txt // 格式化输出、
awk模式
进程ID: Processes: 380 total, 2 running, 378 sleeping, 1597 threads
空隔分隔等于10列
awk 'NF==10 {print $0}' test.txt // 处理并输出行字段(列)等于10列的全部数据
awk 'NF>=10 {print $0}' test.txt
awk 'NF<=10 {print $0}' test.txt
awk 'NR==5{print $1,$2,$3}' test.txt // 输出第5行的前3列
awk 'NR>=5{print $1,$2,$3}' test.txt
awk 'NR<=5{print $1,$2,$3}' test.txt
awk 'NR>=20&&NR>=15{print $0}' test.txt
// 正则模式
awk '/正则表达式/{print $0}' /etc/passwd // 正则模式应该放在//中间
awk '/PID/{print $0}' test.txt // 正则匹配PID、输出整行
awk '/top/{print $0}' test.txt
awk '/[0-9]{1,5}/{print $0}' test.txt
awk '/[0-9]{5}/{print $0}' test.txt
awk动作
动作第一部分: {}
动作第二部分: print printf ...
awk '/[0-9]{5}/{print $1}{print $2}' test.txt // 两个{}的组合动作
awk '/[0-9]{5}/{print $1;print $2}' test.txt // 分号风隔的组合动作
awk '{if(NR==10){print $1;print $2}}' test.txt // 条件判断动作
awk '{if(NR==10)print $1;print $2}' test.txt // 如果if 只有一条语句、可以省略打括号
awk '{if(NR==0){print $1,$2}else{print $3,$4}}' test.txt // if... else...
awk '{if(NF>13&&NF<30){print $1 }}' test.txt
awk '{if(NF>13&&$2=="top"){print $1 }}' test.txt
awk '{if(NF>13&&$3>0){print $1 }}' test.txt
awk '{if(NF>13&&$3>0){print $1 "\t" $3 }}' test.txt
ps -ef|grep java|awk '{print $NF}'
ps -ef|grep java|awk '{print $0}'
ps -ef|grep java|awk '{print $1,$2}'
netstat
netstat 是一款命令行工具、显示网络状态、TCP/UDP/SOCKET等。反向域名解析技术查找每个 IP 地址对应的主机名、会降低查找速度、默认是开启的、 -n 选项禁用域名解析功能。ping、tracert、ifconfig、netstat、nc。
netstat -a 列出所有连接
netstat -at 列出TCP连接
netstat -au 列出UDP连接
netstat -ant 禁用反向域名解析加快查询速度
netstat -tnl 只列出监听中的连接
netstat -s 打印统计数据
netstat -rn 显示内核路由信息
netstat -i 打印网络接口
netstat -ct 持续输出信息
netstat -g 输出 IPv4 和 IPv6 的多播组信息
netstat -nlpt 列出TCP 协议下的监听套接字,同时显示进程信息和一些额外信息