AWK文本并编辑

概述

文本三剑客之一,是功能最强大的文本工具,

awk也是按行进行操作,但是是对行操作完之后可以根据指定命令来对行取列,对列进行操作

awk 分隔符

默认分隔符是空格键或则TAB键,多个空格会压缩成一个

awk的用法

格式: 

awk ‘选项’ 模式或则条件 {操作} 文件(操作对象)

awk ‘{print $1} test.txt’   : 打印test.txt第一列

常用选项

-F:指分隔符,如果是空格,不需要指定

-v : 变量赋值

操作默认就是打印

awk 常用内置变量:

$o:打印所有内容
$n:当前处理行的第n个字段(第n列)

NR:    当前处理的行的行号(序数)

NF:    当前处理的行的字段个数

$NF代表最后一个字段

FS:    列分割符。指定每行文本的字段分隔符,输入内容的分隔符

-F: FS=“:”

不常用的:

OFS:输出内容的列分隔符

内置变量: $N要加"$" 其他内置变量不用加"$" ,更不能用引号,也不能用括号,否则会被当成字符串来处理

awk 的打印功能

awk ‘{print}’ test.txt :打印所有

 0和1放置{ print}前,能够起到限制打印内容的作用(默认为"1"),如果为0,就不打印内容

awk '{print $0}' test1.txt

$0,代表整行内容;

awk是逐行读取处理,配合$0,就是打印所有内容

$1只取第一列,可以对行切片,输出列

只打印行号

 即打印行号,也打印内容

 打印第三行

 打印第二行和第四行

 奇偶打印

 awk运算

格式:

除了加减乘除外,也可以求幂,整数和小鼠都可以

 面试题

awk的内置函数

getline

1、当getline左右无重定向符号(“<”,">")或者管道符号(“|”)时,awk首先读取的是第一行,而getline获取的是光标跳转至下一行的内容(也就是第二行)。

2、当getline左右有管道符号或重定向符时,getline则作用定向输入文件,由于文件是刚打开,并没有被awk读入一行,而只是getline读入,所以getline返回的是文件的第一行,而不是跳转至一行输入

awk '{print $0;getline}' test1.txt 打印一行,跳过一行,打印奇数行

awk '{getline;print $0}' test1.txt  跳过一行。打印一行 打印偶数行

 如果两边有重定向或则管道符,getline 作用于定向输出文件

awk '{getline < "test1.txt"; print $0 > "test2.txt";}' test1.txt

使用重定向把test1输出给test2

ls | awk '{getline ky30; print $0, ky30;}' 

“ | ”  :getline ky30 自定义变量

ls 输出结果传给getline 然后 传给ky30 在打印命令的输出结果,如果没有结果,不做任何结果

文本内容匹配过滤打印:

以root为开头进行过滤

 BEGIN打印模式

格式;

awk 'BEGIN{...};{...};END{...}' 文件

处理过程:

1、在awk处理指定的文本之前,需要先执行BEGIN{...}模式里的命令操作

2、中间的{...} 是真正用于处理文件的命令操作

3、在awk处理完文件后才会执行END{...}模式里的命令操作。END{ }语句块中,往往会放入打印结果等语句。

 BEGIN定义某个模式,中间的对前面的模式进行操作,最后打印结果

-v的用法:变量赋值

 把原来的“ : ” 的分隔符变为“+” 并打印变量的内容

awk 条件判断打印

UID大于500 的进行打印

 取反,uid小于10的行,所有列

awk的三元表达式与精准筛选用法

格式:

awk '(条件表达式)?(A表达式或者值):(B表达式或者值)'

? : 表示if  (满足)

“ :” : 表示else (不满足)

三元表达式:条件表达式、A表达式、B表达式

 awk的精确筛选:

$n(> < ==):  用于对比数值

$n~"字符串": 代表第n个字段包含某个字符串

$n!~"字符串": 代表第n个字段不包含某个字符串

$n=="字符串": 代表第n个字段为某个字符串

$n!="字符串": 代表第n个字段不为某个字符串

$NF: 代表最后一个字段

例如:

输出第七个字段不包含“nologin”所在行的第1个字段和第3个字段

awk -F: '$7!~"nologin" {print $1,$3}' /etc/passwd

指定第六个字段为/home/dn,第七个字段为/bin/bash,输出满足这些条件所在行的第一个和最后一个字段

awk -F: '($6=="/home/dn")&&($7=="/bin/bash"){print $1,$NF}' /etc/passwd

awk 和tr比较改变分隔符

 awk方式

awk结合数组运用

在awk中,怎么定义数组

 awk中的数组形成遍历

awk 'BEGIN{a[0]=10 ; a[1]=20 ; a[2]=30;for(i in a)print i,a[i]}' 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值