AWK学习笔记(一)

本文介绍了awk的基本概念和用法,包括BEGIN和END规则、分隔符设置以及内置变量的使用。awk通过逐行处理文本,提供了一种强大的文本分析和操作能力,可用于复杂的文本处理任务。
摘要由CSDN通过智能技术生成

一,awk概述

awk 处理机制 :awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作
在命令格式上分别体现如下 :
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
{}: 逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令快

END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果

 

比较经常用到的三种格式分别是:

# awk 'pattern' filename

# awk '{action}' filename

# awk 'pattern {action}' filename

二,awk基本用法

awk [-F|-f] 'BEGIN{}{command1; command2} END{}' file
[-F|-f]   大参数,-F指定分隔符,-f调用脚本
'  '          引用代码块
//           匹配代码块,可以是字符串或正则表达式
{}           命令代码块,包含一条或多条命令
;          多条命令使用分号分隔

awk是一款很强大的文本处理工具,他把所要处理的字符串 按行 读入到内存进行分段处理。默认情况下是以空格或者tab作为分隔符,对每个分段都分配一个名字,第1部分用$1表示,第2部分用$2表示以此类推,整行内容用$0表示,另外变量NF表示当前行有多少个字段,因此$NF就代表最后一个字段具体如下:

Haveaniceday
$1$2$3  $(NF-1)$4  $(NF)

awk其他的内置变量:

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

如果想对哪部分进行操作的话,直接用$n(n是数字)指定就可以了,这里的的操作一般是指print  (自动换行)。printf则不会自动换行。

awk的基本语法:awk ‘{print $n}’

如果想打印第1部分和第3部分,可以用逗号隔开:

这里用逗号隔开的话,显示的结果是空格进行连接,如果不用逗号的话,结果是连在一起的:

或者 echo 'have a nice day' | awk '{print $1  $2}'  输出  havea

另外如果用双引号

echo 'have a nice day' | awk "{print $1  $2}"   输出 have a nice day

awk -F"[01]" '{}'  这种形式指定的分隔符是或的关系,即0或1作为分隔符;
awk -F"[0][1]" '{}' 这种形式指定的分隔符是合并的关系,即以“01”作为一个字符为分隔符。

echo "my -name is,-dai " | awk -F'[,-]' '{print $1}'       my

echo "my -name is,-dai " | awk -F'[,-]' '{print $2}'       name is

echo "my -name is,-dai " | awk -F'[,-]' '{print $3}'       输出为空

echo "my -name is,-dai " | awk -F'[,-]' '{print $4}'       dai

另外如果想同时以空格 或者-或者逗号作为分隔符呢?还可以这样写:

分隔符空格不能出现在[]里,注意上面的写法

awk '{print NR ") " $0}' demo.txt
1) aaa 1 root 11111
2) bbb 2 ro2t 222 ddd aaa
3) ccc 3 xxxx  r22t  dddd
4) ddd 4 yyy  root 222
5) eee 5 aaa zzz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值