登陆

章鱼彩票app官网下载-Linux:“awk”指令的妙用

admin 2019-09-06 201人围观 ,发现0个评论

awk是一个强壮的文本剖析东西,章鱼彩票app官网下载-Linux:“awk”指令的妙用简略来说awk便是把文件逐行读入,(空格,制表符)为默许分隔符将每行切片,切开的部分再进行各种剖析处理。

0、根本用法

awk是一个强壮的文本剖析东西,简略来说awk便是把文件逐行读入,(空格,制表符)为默许分隔符将每行切片,切开的部分再进行各种剖析处理

awk指令格局如下

awk [-F field-separator] 'commands' input-file(s)

[-F 分隔符]是可选的,由于awk运用空格,制表符作为缺省的字段分隔符,因而假设要阅读字段间有空格,制表符的文本,不用指定这个选项,但假设要阅读比如/etc/passwd文件,此文件各字段以冒号作为分隔符,则有必要指明-F选项

echo "this is a test" | awk '{ print $0 }' 
## 输出为
this is a test

shell读取用户输入的字符串发现|,代表有管道。|左右被理解为简略指令,即前一个(左面)简略指令的规范输出指向后一个(右边)规范指令的规范输入

awk会依据分隔符将行分红若干个字段,$0为整行,$1为榜首个字段,$2 为第2个地段,依此类推…

为打印一个字段或一切字段,运用print指令。这是一个awk动作

echo "this is a test" | awk '{ print $1 }' 
## 输出为
this
echo "this is a test" | awk '{ print $1, $2 }'
## 输出为
this is

/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

举几个简略的小需求

1、只显现/etc/passwd的账户

awk -F : '{ print $1 }' /etc/passwd 
## 输出为
root
bin
daemon
adm
lp

2、显现/etc/passwd的第1列和第7列,用逗号分隔显现,一切行开端前增加列名start1,start7,最终一行增加,end1,end7

awk -F ':' 'BEGIN {print "start1,start7"} {print $1 "," $7} END {print "end1,end7"}' /etc/passwd 
## 输出为
start1,start7
r章鱼彩票app官网下载-Linux:“awk”指令的妙用oot,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
end1,end7tmxmall

BEGIN句子在一切文本处理动作章鱼彩票app官网下载-Linux:“awk”指令的妙用履行之前被履行,END在一切文本处理动作履行之后被履行

3、计算/etc/passwd文件中,每行的行号,每行的列数,对应的完好行内容

awk -F : '{ print NR " " NF " " $0 }' /etc/passwd 
## 输出为
1 7 root:x:0:0:root:/root:/bin/bash
2 7 bin:x:1:1:bin:/bin:/sbin/nologin
3 7 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 7 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

1、支撑内置变量

上面示例中NR,和NF其实便是awk的内置变量,一些内置变量如下

变量名 解说
FILENAMEawk阅读的文件名
FS设置输入字段分隔符,等价于指令行-F选项
NF 阅读记载的字段个数
NR 已读的记载数

2、支撑函章鱼彩票app官网下载-Linux:“awk”指令的妙用数

输出字符串的长度

awk 'BEGIN { print length("this is a text") }'

## 输出为

14

将/etc/passwd的用户名变成大写输出

awk -F ':' '{ print toupper($1) }' /etc/passwd

## 输出为

ROOT 
BIN
DAEMON
ADM
LP

常用函数如下

函数名 作用
toupper(s)回来s的大写
tolower(s) 回来s的小写
length(s) 回来s长度
substr(s,p) 回来字符串s中从p开端的后缀部分

3、支撑条件操作,正则表达式匹配

显现/etc/passwd中有daemon的行

awk -F ':' '$0 ~ /daemon/' /etc/passwd

## 输出为

daemon:x:2:2:daemon:/sbin:/sbin/nologin 
awk条件操作符
操作符 描绘
< 小于 < = 小于等于 == 等于 != 不等于 ~ 匹配正则表达式 !~ 不匹配正则表达式

4、支撑流程操控句子,类C言语

if while do/while for break continue

输出榜首个字段的榜首个字符大于d的行

awk -F ':' '{ if ($1 > "d") { print $1 } else { print "-" } }' /etc/passwd

## 输出为

root 
-
daemon
-
lp

能够把流程操控句子放到一个脚本中,然后调用脚本履行,如test.sh的内容如下

{ 
if ($1 > "d") {
print $1
} else {
print "-"
}
}

用如下方法履行,作用相同

awk -F ':' -f test.sh /etc/passwd

## 输出为

root 
-
daemon
-
lp

5、使用章鱼彩票app官网下载-Linux:“awk”指令的妙用场景

小编用awk进行文本剖析比较少,首要用来写脚本

如一个weibo-interface-1.0.jar使用,发动脚本如下

start.sh
nohup java -jar weibo-interface-1.0.jar >out 2>&1 &

封闭脚本如下,kill.sh

kill -9 `jps -l | grep 'weibo-interface-1.0.jar' | awk '{print $1}'`

jps -l的输出如下

70208 com.st.kmp.main.KmpService 
31036 com.st.cis.main.BaiduAnalysisService
66813 weibo-interface-1.0.jar

还有便是封闭hadoop集群的一切DataNode节点(不知道hadoop的能够以为DataNode是一个集群使用),假设一个个机器jps,检查pid,kill。很费事,直接写了一个脚本,顺次ssh到各个节点,然后履行如下指令即可

kill `jps | grep 'DataNode' | awk '{print $1}'`

jps的输出为

508 DataNode 
31481 JournalNode
31973 NodeManager
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP