文本三剑客之awk(非常好用的剪切工具)

目录

awk的基本介绍:

##awk

​编辑

awk基本用法

##awk用法

awk命令的操作符

##内置变量

##内置函数

awk的条件语句

awk 的for循环 

awk 数组

##awk引用shell变量过程

##awk的双引号用法


awk

awk的基本介绍:

GAWK(1)                                           Utility Commands                                           GAWK(1)

NAME
       gawk - pa

##awk

接一个单引号,后面接一个花括号双引号是用不了的

awk命令是一种用于文本处理的强大工具#注意要有空格 而且是单引号

##完整格式 awk 'BEGIN{comamds}pattern{commands}END { commands }'file

awk基本用法

##awk用法

显示文件的某一列

awk '{ print $2 }' file.txt

##过滤功能  pattern模式,模版

awk '/pattern/ { print }' file.txt

[root@wangyalin-hunan-changsha passwd]# awk '/root/ { print }' sanchuang_passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

计算文件的行数:

awk 'END { print NR }' file.txt

[root@wangyalin-hunan-changsha passwd]# awk 'END{print NR}' sanchuang_passwd

73

分隔符-F

awk -F',' '{ print $1 }' file.txt

引用变量--->也可以使用双引号,但是$符号要接转移字符--->\$

-v variable

[root@wangyalin-hunan-changsha shell]# echo $name

wang

[root@wangyalin-hunan-changsha shell]# awk -F ":" -v var=$name '$1 ~ var {print $1}' /etc/passwd

wangyalin

awk命令的操作符

##内置变量

NR: 记录的行数 number of record

NF:字段数,一行有多少列 number of filed

FS: ---》-F输入分隔符,默认是空白分割符(默认是tab和空格)field separator

OFS:输出分隔符,默认是空格分割符out field separator

##内置函数

##length()获得字符串长度的函数

##systime()获得时间的内置函数--获得现在距1970年的时间

##strftime(“%D”,systime())

[root@wangyalin-hunan-changsha shell]# awk '{print strftime("%D",systime())}' /etc/passwd

##system() 可以调用一些系统函数

[root@wangyalin-hunan-changsha shell]# awk '{system("mkdir -p /tmp/sc/" $1)}' ./name.txt

##split() 分割函数

split($1,ip,”:”)--->$1,表示被切割的字段,ip就是切割后存放数据得数组,”:”表示分割符

##substr()切割字符串的函数--类似cut

substr($1,2,4)##表示切割$1字段,2##表示起始字符,从第二个字符开始截取;4##表示截取字符长度,截取4个字符串

[root@wangyalin-hunan-changsha shell]# echo kajudswhfiucansiufh  aeiuw|awk '{ print substr($1,2,4)}'

ajud

awk的条件语句

awk 的for循环 

awk 数组

##数组下标从1 开始

##bash,Python 数组下标都是从0开始

[root@wangyalin-hunan-changsha shell]# cat bill.txt|awk '{bill[$1] += $2}END{for( i in bill) print i ,bill[i]}'

wang 346

feng 100215

tan 143

zhao 1293

tian 23

liu 325466

zhang 12

[root@wangyalin-hunan-changsha shell]# cat bill.txt

feng 100000

feng 212

feng 3

wang 23

wang 323

liu 32

liu 325434

tian 23

zhang 12

zhao 1293

tan 143

##awk引用shell变量过程

[root@wangyalin-hunan-changsha ~]# watch -d -n 2 "ifconfig ens33|awk '/bytes/{print \$1,\$5}'"

awk: cmd. line:1: /bytes/{print ,}

awk: cmd. line:1:               ^ syntax error

awk: cmd. line:1: /bytes/{print ,}

awk: cmd. line:1:                ^ syntax error

awk: cmd. line:1: /bytes/{print ,}

awk: cmd. line:1:                 ^ unexpected newline or end of string

##shell解释过程中"ifconfig ens33|awk '/bytes/{print \$1,\$5}'"被当做参数,同时会把$1,$5当做位置变量,但是刚开始时候那个awk命令并没有执行,所以$1,$5是空值的,也就无法执行

##awk的双引号用法

name=wang

使用双引号,但是$的一般用法(0-9,#*),符号要接转移字符--->\$

[root@wangyalin-hunan-changsha ~]# awk -F ":" "\$1 ~ /$name/ {print \$1}" /etc/passwd

wangyalin

wangguang

##接-v的用法

[root@wangyalin-hunan-changsha ~]# awk -F ":" -v var=$name '$1 ~ var {print $1}' /etc/passwd

wangyalin

wangguang

##这是我经常做文本编辑文件的内容格式

##这个以":"为分割符 ,$1是表示第一个字段

[root@web ~]# cat /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
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值