awk的基本用法(一)

awk 的工作原理:

执行BEGIN{action;...}语句块中的语句。
从文件或标准输入(stdin)读取一行,然后执行pattern{action;...}语句块,它逐行扫描文件,从第一行到最后一行重复这一个过程,直到文件全部读取完毕。
当读至输入流末尾时,执行END{action;...}语句块。
BEGIN语句块在awk开始输入流中读取之前执行。这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可写在BEGIN语句块中。
END语句块在awk从输?流中读完所有的?之后被执?,?如打印所有?的分析结果这类信息汇总都是在END语句块中完成,它也是?个可选语句块。
pattern语句块中的通?命令是最重要的部分,也是可选的。如果没有提供attern语句块,则默认执?{print},即打印每?个读取到的?,awk读取的每??都会执?该语句块。

注意:

逗号分隔符;
输出的各item可以是字符串,也可以是数值;当前记录的字段、变量或awk的表达式;
如省略item,相当于print $0.

awk基本用法:

-F:指明输?时?到的字段分隔符;
-v var=value:?定义变量。

eg:
    awk -F: ‘{print $1}‘ /etc/passde
    指定:未分隔符,打印每行记录的第一个字段即输出$1

awk 的变量用法

内置变量:
FS:输出自动分隔符。默认空白字符
OFS:输出自动分隔符,默认空白字符
RS:输出记录分隔符,指定输入时的换行符,原换行符仍有效
ORS:输出记录分隔符,输出时用指定符号代替换行符
NF:字符数量
NR:行号
FNR:各文件分别计数,记录号;
FILENAME:当前文件名;
ARGC:命令行参数的个数
ARGV:数组,保存的时命令行所给定的各参数

eg:

输入字段分隔符FS:
    ~]# awk -v FS=‘:‘ ‘{print $1,FS,$3}‘ /etc/passwd
    root : 0
    bin : 1
    daemon : 2
    adm : 3
    lp : 4
    sync : 5
    ...
 输?出字段分隔符OFS
    ~]# awk -v FS=‘:‘ -v OFS=‘----‘ ‘{print $1,$3,$7}‘ /etc/passwd
    root----0----/bin/bash
    bin----1----/sbin/nologin
    daemon----2----/sbin/nologin
    adm----3----/sbin/nologin
    lp----4----/sbin/nologin
    sync----5----/bin/sync
    shutdown----6----/sbin/shutdown
    ...
输?记录分隔符RS
    ~]# head -1 /etc/passwd | awk -v RS=‘:‘ ‘{print}‘
    root
    x
    0
    0
    root
    /root
    ...
输出记录分隔符ORS
    ~]# awk -v OR=‘ ‘ -v ORS=‘----‘ ‘{print}‘ /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----adm:x:3:4:adm:/var/adm:/sbin/nologin--
    --lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin----
    ...
字段数量NF
    ~]#  awk -F: ‘{print NF}‘ /etc/passwd
    7
    7
    7
    7
    7
    ...
?号NR变量
    ~]#  awk -F: ‘{print NR,$1}‘ /etc/passwd
    1 root
    2 bin
    3 daemon
    4 adm
    5 lp
    6 sync
    7 shutdown
    ...
各?件分别的记录号FNR
     ~]#  awk ‘{print FNR,$1}‘ /etc/fstab /etc/passwd
     1 UUID=0c239cec-c2f7-49b6-9090-c1adf0f074cb
    2 /dev/mapper/vg_magedu-lv_root
    3 /dev/mapper/vg_magedu-lv_swap
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    ...
当前?件名FILENAME
     ~]#  awk ‘{print FILENAME,FNR,$1}‘ /etc/fstab /etc/passwd
     /etc/fstab 1 UUID=0c239cec-c2f7-49b6-9090-c1adf0f074cb
    /etc/fstab 2 /dev/mapper/vg_magedu-lv_root
    /etc/fstab 3 /dev/mapper/vg_magedu-lv_swap
    /root/awktest.txt 1 root:x:0:0:root:/root:/bin/bash
    /root/awktest.txt 2 bin:x:1:1:bin:/bin:/sbin/nologin
    /root/awktest.txt 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ...
命令?参数的个数ARGC
     ~]#  awk ‘BEGIN {print ARGC}‘ /etc/fstab /etc/inittab
     3
命令?给定的各参数的数组ARGV
    ~]#  awk ‘BEGIN {print ARGV[1]}‘ /etc/fstab /etc/inittab
    /etc/fstab

awk 自定义变量

eg:

命令?给定的各参数的数组ARGV变量
    ~]#  awk -F: -v name=‘username:‘ ‘{print name,$1}‘ /etc/passwd
    username: root
    username: bin
    username: daemon
    username: adm
    ...

awk 的格式化输出

格式符:与item一一对应
    %c:显?字符的ASCII码;
    %d,%i:显??进制整数;
    %e,%E:显?科学计数法数值;
    %f:显?为浮点数;
    %g,%G:以科学计数法或浮点形式显?数值;
    %s:显?字符串;
    %u:?符号整数;
    %%:显?%??。
修饰符 :
    #[.#]:第?个#为数字控制显?的宽度,第?个#表??数点后的精度,如%3.1f;
    -:左对齐(默认右对齐),如%-15s;
    +:显?数值的正负号,如%+d。

awk 的操作符

赋值操作符:
    =:右边赋值给左边;
    +=:先加,再赋值;
    -=:先减,再赋值;
    *=:先乘,再赋值;
    /=:先除,再赋值;
    %=:先取余,再赋值;
    ^=:先幂运算,再赋值;
    ++:递增操作;
    --:递减操作。
?较操作符:
    ==:判断相等;
    !=:判断不等;
    >:判断?于;
    >=:判断?于等于;
    <:判断?于;
    <=:判断?于等于。
模式匹配符:
    ~:左边是否和右边匹配包含;
    !~:是否不匹配。
逻辑操作符:
    &&:逻辑与;
    ||:逻辑或;
    !:逻辑?。

共勉!

原文地址:https://blog.51cto.com/14234169/2378494

时间: 2024-10-17 06:25:47

awk的基本用法(一)的相关文章

awk 的一些用法

awk,我觉得是Linux里面处理文本最精妙的命令,它是一个行处理的命令,它最初级的用法是:给定一些简单的pattern,然后按照这个pattern 去搜索匹配的行.它的高级用法是用awk来编程,除了原来的匹配字符串这个功能之外,还可以做一些统计,替换,数学计算的功能, 甚至可以编写自定义的函数,甚是神奇. 1. AWK 初级用法 awk 'pattern' filename awk '{action}' filename awk 'pattern {action}' filename //找到

awk的基本用法

awk: 文本处理三剑客:grep系,sed,awk 1. grep系:基于PATTERN进行文本过滤 grep:支持基本的正则表达式 egrep:支持基本的和扩展的正则表达式 fgrep:不支持正则表达式,纯文本 2.sed:流编辑器,逐行编辑器: 模式空间 保持空间 3. awk:报告生成器:格式化文档输出: 也是一种编程语言(有变量...) gawk:模式扫描和处理语言: 格式:gawk [ options ] 'program' file... program:[/PATTERN/]{A

浅谈awk的基本用法

awk 1.域和记录: 取第一域,并在开头和结尾加字符begin和end 通常使用BEGIN来显示变量和预置变量,使用END来输出最终结果. awk  ' BEGIN  {print "being"}  {print $1}  END  {print "end"}'   file 2.条件操作符: 第一字域,包含expect,就打印整行 awk '{if($1~/expect/) print $0}' c.sh 或者 awk '$1~/expect/{print $

AWK命令的用法

1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个字段的值. 2.awk常用的作用格式: awk “样式” 文件: 把符合样式的数据行显示出来. awk { 操作 } 文件: 对每一行都执行{}中的操作. awk " 样式 { 操作 }" 文件: 对符合样式的数据行,执行{}中的操作. 3.用例: awk的用法1: awk `/La/`

awk的基础用法

继续看看awk吧,本来准备看看就算了,还是记下来以免白费时间 awk 内置变量 NF.NR.FS [[email protected] /data/backup]#cat > studyawk name chinese english math average lucy 80 60 92 773 malei 75 55 80 70 andy 60 90 70 73.33 [[email protected] /data/backup]#sed -i 's/773/77.33/g' studyaw

awk常用函数用法

length函数返回字符串的长度 # echo "xiaoming235" | awk '{print length}' 11 # awk -F ":" 'length($NF)>13 {print $0}' /etc/passwd shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown gsub使得在所有正则表达式被匹配的时候都发生替换 0001|20081223efskjfdj|EREADFASDLKJCV 0002|20

shell awk 的一些用法

#1.打印挂载目录的使用量,默认以空格为分割 df -Ph | awk '{ print $5,$6 }' #2.以空格.冒号.\t.分号为分割 awk -F '[ :\t;]' '{print $1}' #3.打印6.txt文件中的第3行至第5行,NR表示打印行,$0表示文本所有域 awk 'NR==3,NR==5 {print}' 6.txt awk 'NR==3,NR==5 {print $0}' 6.txt #打印6.txt文件中的第3行至第5行的第2列与第4列 awk 'NR==3,N

linux学习:sed与awk与tr用法整理

流编辑器:sedsed 's/pattern/replace_string/' file #从给定文本中的字符串利用正则表达式进行匹配并替换每一行中第一次符合样式的内容sed 's/text/replace/' file > newfile #替换每一行中第一次符合样式的内容并将替换结果重定向到新文件sed -i 's/test/replace/' file #参数-i使用替换每一行中第一次符合样式的内容结果应用于源文件sed 's/pattern/replace_string/g' file

转载:shell中awk printf的用法

转载:http://www.linuxawk.com/jiaocheng/83.html 6. printf函数 打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给标准输出,如同C语言中的printf语句一样.printf语句包括一个加引号的控制串,控制串中可能嵌有若干格式说明和修饰符.控制串后面跟一个逗号,之后是一列由逗号分隔的表达式.print