文本处理(grep, sed和awk等)linux

Linux--awk命令

2019-08-26  本文已影响0人  李小李的路

概述

awk使用方法

case-1:
[root@localhost ~]# awk '条件1 {动作 1} 条件 2 {动作 2} …' 文件名
case-2:
awk '{pattern + action}' {filenames}

awk条件(pattern)

awk支持的主要条件.png

例如:
x>10:判断变量 x 是否大于10;
x == y:判断变量 x 是否等于变量 y;
A~B:判断字符串 A 中是否包含能匹配 B 表达式的子字符串;
A!~B:判断字符串 A 中是否不包含能匹配 B 表达式的子字符串;

ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

awk动作(action)

格式化输出;
流程控制语句;

awk调用的三种方式

1.命令行方式
awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

awk入门案例

[liyahui@172 14]$ tail -n 5  /etc/passwd | awk  '{print $1}'
root
root
root
dmtsai
root
#cat /etc/passwd |awk  -F ':'  '{print $1}'  
root
daemon
bin
sys
#cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'
root    /bin/bash
daemon  /bin/sh
bin     /bin/sh
sys     /bin/sh
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
blue,/bin/nosh
#awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
# awk -F: '/root/{print $7}' /etc/passwd             
/bin/bash
#awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
 awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

print和printf

awk编程

awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
user count is  40
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
[start]user count is  0
root:x:0:0:root:/root:/bin/bash
...
[end]user count is  40
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
[end]size is  8657198
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}' 
[end]size is  8.25889 M

awk面试题

shell面试题


参考博客:
linux 之shell篇 awk命令
Shell awk命令详解(格式+使用方法)
https://www.cnblogs.com/chenhuan001/p/6297615.html
shell 强大的awk
Shell编程之AWK的使用

上一篇下一篇

猜你喜欢

热点阅读