awk编辑器

网友投稿 249 2022-11-04

awk编辑器

awk 工作原理: 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“11”表示“或”、 “!”表示“非”; 还可以进行简单的数学运算,如+、-、*、/、号、^分别表示加、减、乘、除、取余和乘方。 命令格式: awk 选项 '模式或条件{操作}'文件1文件2.. awk-f 脚本文件 文件1 文件2. awk常见的内建变量(可直接用)如下所示: FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-E"作用 相同 NF:当前处理的行的字段个数。 NR:当前处理的行的行号(序数)。 $0:当前处理的行的整行内容。 $n:当前处理行的第n个字段(第n列)。 FILENAME:被处理的文件名。 RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk-次仅读入一条记录, 以进行处理。预设值是'\n' 按行输出文本: awk ' {print}' testfile2 输出所有内容 awk ' {print $0}' testfile2 输出所有内容 awk 'NR==1,NR==3{print}' testfile2 输出第1~3 行内容 awk ' (NR>=1) && (NR<=3) {print}' testfile2 输出第1~3行内容 awk 'NR==1 ||NR==3{print}' testfile2 #输出第1行、第3行内容. awk ' (NR82)==1{print}' testfile2 #输出所有奇数行的内容 awk ' (NR号2)==0{print}' testfile2 #输出所有偶数行的内容 awk ' /^root/ {print}' /etc/passwd #输出以root 开头的行 awk ' /nologin$/ {print}' /etc/passwd #输出以nologin结尾的行 awk 'BEGIN {x=0}; /\/bin\/bash$/ {x++} ;END {print x}' /etc/passwd #统计以/bin/bash结尾的行数,等同于grep -c "/bin/bash$" /etc/passwd BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作: awk再 处理指定的文本,之后再执行END模式中指定的动作 ,END{}语句块中,往往会放入打印结果等语句 按字段输出文本: awk -F ":" '{print $3}' /etc/passwd #输出每行中(以空格或制表位分隔)的第3个字段 awk -F ":" '{print $1,$3}' /etc/passwd #输出每行中的第1、3个字段 awk -F ":" '$3<5{print $1,$3}' /etc/passwd #输 出第3个字段的值小于5的第1、3个字段内容 awk -F ":" '! ($3<200) {print}' /etc/passwd #输出第3个字段的值不小于200的行 awk 'BEGIN {FS=":"}; {if ($3>=1000) {print}}' /etc/passwd # 先处理完BEGIN的内容,再打印文本里面的内容 awk -F ":" ' {max=($3>=$4) ?$3:$4; {print max}' /etc/passwd # ($3>$4)?$3:$4;三元运算符,如果第3个字段的值大于等于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给max awk -F ":”'{print NR, $0}' /etc/passwd #输出每行内容和行号,每处理完一条 记录,NR值加1 awk -F ":" '$7~"/bash"{print $1}' /etc/passwd #输 出以冒号分隔且第7个字段中包含/bash的行的第1个字段 awk -F ":" ' ($1~"root")&& (NF==7) {print $1,$2}' /etc/passwd #输出 第1个字段中包含root且有7个字段的行的第1、2个字段 awk -F ":" ' ($7!=" /bin/bash")&& ($7!="/sbin/nologin") {print}' /etc/passwd #输出第7个字段既不为/bin/bash,也不为/ sbin/nologin的所有行 通过管道、双引号调用SheLL命令: echo $PATH | awk ' BEGIN{RS=":"};END{print NR} ' #统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句 awk -F: ' /bash$/{print | "WC -1"}' /etc/passwd #调用wc -1命令统计使用bash的用户个数,等同于grep -c "bash$" /etc/passwd free -m 1 awk ' /Mem:/ {print int ($3/ ($3+$4)*100) "各"}' #查看当 前内存使用百分比 top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}' #查看当前CPU空闲率,(-b -n 1 表示只需要1次的输出结果) date -d "$(awk -F "."' {print $1}' /proc/uptime) second ago" +"%F 8H: M:8S" #显示上次系统重启时间,等同于uptime; second ago为 显示多少秒前的时间,+"&F &H: 8M: 8S"等同于+"8Y-8m-号d 8H: 8M: 8S"的时间格式 date -d "$(date -d"1 month" +"8Y8m01") -3 day" +"8Y8m&d"当月 倒数第三天 date +"号Y号m01" 当月第一天 awk 'BEGIN {n=0 ; while ("w" 1 getline) n++ ; {print n-2}}' #调用w命令,并用来统计在线用户数 awk ' BEGIN {"hostname" | getline ; {print $0}}' #调用hostname, 并输出当前的主机名 seq 10 | awk ' {getline; print $0}' #获取偶数行 seq 101 awk '{print $0; getline} ' #获取基数行 当getline左右无重定向符“<”或“|”时,awk首先读取到了第一行, 就是1,然后getline,就得到了1下面的第二行,就是2,因为getline之 后,awk会改变对应的NE,NR, FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。 当getline左右有重定向符“<”或“|”时,getline则作用 于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入 ,那么getline返回的是该文件的第一 行,而不是隔行。 FNR: awk 当前读取的记录数,其变量值小于等于NR (比如当读取第二个文件时,FNR是 从0开始重新计数,而NR不会)。 NR==ENR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文 件 CPU使用率 cpu_ us=itop -b -n 1 | grep Cpu | awk cpu_ sy='top -b -n 1 1 grep Cpu 1 awk -F ',' '{print $2}' | awk ' {print $1}'、 cpu_ sum=$( ($cpu_ _us+$cpu_ sy)) echo $cpu_ sum echo "A B C D" | awk ' {OFS="I";print $0;$1=$1;print $0}' ABCD AIBICID $1=$1是用来激活$0的重新赋值,也就是说 字段$1...和字段数NF的改变会促使awk重新计算$0的值,通常是在改变0FS后而需要输出$0时这样做 awk ' {a[$1]++}END{for(i in a) {print a[i]}' test.txt | sort -r

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:澜起科技积极参与DDR5内存标准的制定 布局研发DDR5内存接口芯片
下一篇:解决springboot+shiro+thymeleaf页面级元素的权限控制问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~