Linux:Shell编辑之文本处理器(awk)

目录

绪论

1、用法

1.1 格式选项

1.2 awk 常用内置变量

1.3 awk的打印功能

1.4 奇偶打印

1.5 awk运算

1.6 awk的内置函数:getline

1.7 文本过滤打印

1.8 awk条件判断打印

1.9 三元表达式,类似于java

1.10 awk的精确筛选

1.11 awk和tr比较改变分隔符

1.12 awk结合数组来进行使用

1.13 去重统计


绪论

awk是文本三剑客之一(grep,sed,awk),是功能最强大的文本工具,也是按行来进行操作,对行操作完之后,可以根据指定命令来进行取列

awk的分割符,他的默认分隔符是空格,或者tab键,多个空格,它会自动压缩成一个

1、用法

awk  选项  '模式或者条件{操作}' 文件

1.1 格式选项

-F 指定分割符,如果是空格,则不需要加F

-v 变量赋值

{操作}:默认为打印

eg:awk  '{print  $1}'  test.txt  打印第一列

打印多列的话用逗号隔开,$0表示全部打印

1.2 awk 常用内置变量

$0 打印所有内容

$n 处理行的第几列

NR 处理行的行号

NF 处理当前行的字段个数,$NF就表示最后一个字段

FS 列分割符,指定文本的分割符,和F作用一直

F:分割符  FS=":"

OFS 输出文本的分割符

RS 输出分割符为回车,行分割符

内置变量$n要加$,表示列的;其他的内置变量,不用加$,更不能用引号,也不能用括号,否则会被当成字符串处理

1.3 awk的打印功能

awk  '{print}  '  文件名

awk  '{print  NR}  '  文件名

awk  '{print  NR,$0}  '  文件名

指定行号打印输出内容:

awk  'NR==3{print}'  test,txt  打印第三行

awk  'NR==2,NR==4{print}'  test,txt  打印第二到四行

awk  'NR==2;NR==4{print}'  test,txt  打印第二和四行

1.4 奇偶打印

awk  'NR%2==0{print}'  文件名  偶数打印

1.5 awk运算

awk  'BEGIN{PRINT  10+20}'

awk  'begin{print 3^2}'  3的2次方,也支持小数运算

awk  '{print  $3}'  test.txt取出第三行

1.6 awk的内置函数:getline

· 如果getline左右两侧没有重定向符号(<>),或者没有(|)时,awk会先读第一行,但是如果加了getline,跳过第一行,读取第二行

awk  '{getline;print}'  test.txt  打印了第二行和第四行,偶数打印

awk  '{print;getline}'  test.txt  奇数打印

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

awk  '{getline  <  "test1.txt";print>"test2.txt"}'  test1.txt操作对象是test1.TXT,获取test1的内容,传给test2

ls  |  awk  '{getline  ky30;print ,ky30;}'        getline:自定义的变量。把ls输出的结果传给ky30,打印前面ls的结果

1.7 文本过滤打印

awk 以root为开头的行:

awk  '/^root/{print}'  /etc/passwd

awk  'BEGIN{..};{..};END{..}'  文件在对文件进行操作之前会先执行BEGIN{..}的模式条件,或者是命令操作。中间的{..}是真正的处理文件的命令。END{..}结束语句,一般都是打印执行结果

v变量赋值,指的是改变分割符

1.8 awk条件判断打印

awk  -F:  '$3>100{print}'  /etc/passwd  |  head  -n  15  第三列大于100的打印出来

取反:awk  -F:  '!($3>10){print}'  /etc/passwd  |  head  -n  15

awk支持条件判断语句if

awk  -F:  '{if  ($3>10)  {print}}'  /etc/passwd

1.9 三元表达式,类似于java

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

?相当于if       :相当于else

awk  -F:  '{i=($3>$4)?$3:$4;{print  $1,$2}}'  /etc/passwd

1.10 awk的精确筛选

 $NF:最后一个字段

head  -n  2  /etc/passwd  |  awk  -F:  '{print  $NF}'  第七个字段为bash,打印第一列和最后一列

awk  -F:  '$7!~"nologin"{print  $1,$3}'  /etc/passwd  第七个字段不是nologin的打印第一列和第三列

&&和    ||或   条件表达式用括号括起来

1.11 awk和tr比较改变分隔符

echo  a  b  <  d  |  tr  "   "  "   "  ":"  输出a:b:c:d

1.12 awk结合数组来进行使用

在awk中怎么定义数组

1.13 去重统计

 

 

提取host.txt主机名

 awk  -F  '[  .]+' '{print  $2}'  test.txt

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦雨天梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值