需求:判断hadoop用户是否存在
**************************************************
#!/bin/bash
result=`awk -F ":" '{if($1=="hadoop") print $1}' /etc/passwd`
if [ -n result ]
then
echo "the $result is exists"
fi
运行:
./myawk.sh
**************************************************

如何判断NameNode进程是否启动
jps|awk '{if($2=="NameNode")print $2}'

**************************************************

用户名=>用户路径
vi myawk01.awk
BEGIN{
print "$$$$$$$$$$$$$"
FS=":"
OFS="=>"
}
{
print $1,$6

}
END{
print "@@@@@@@@@@@"
}

执行:
awk -f ./myawk01.awk /etc/passwd
**************************************************

#给输出信息加上表头( \t 表示空格   \n表示换行)
awk -F ":" 'BEGIN {print "name\tshell\n--------------------------------"}
{print $1"\t"$6}' /etc/passwd

----------------------------------------------------------
#给输出信息加上表头和末尾
awk -F : 'BEGIN {print "name\tshell\n--------------------------------"}
{print $1"\t"$6} END {print "end-of-report"}' /etc/passwd

awk -F ":" 'BEGIN {print"--BEGIN--"}$1=="root" { print $1} END{print"----END------"}' /etc/passwd


awk -F ":" 'BEGIN {print"--BEGIN--"}
{if( $1=="root") print $1}
END{print"----END------"}' /etc/passwd

-------------------------------------------------------------------

----------------------------------------------------------
正则表达式匹配格式
1)$n~正则表达式
2)if($n~正则表示式) print $0
----------------------------------------------------------

#打印以root开头的行
awk -F ":" '$0 ~ /^root/' /etc/passwd
#打印以ntp开头并以login结尾的行
awk -F : '$0 ~ /^ntp.*login$/ ' /etc/passwd
#打印包含nobody的行
awk -F : '{if($1~/nobody/) print $0}' /etc/passwd
#打印包含nobody或Nobody的行
awk -F : '{if($1~/[nN]obody/) print $0}' /etc/passwd
#打印n/N开头的行,
awk -F ":" 'BEGIN{print "userName"}{if($1~/^(n|N).*$/) print$0}' /etc/passwd
----------------------------------------------------------

#精确匹配|
#打印名字为root的用户在/etc/passwd文件中的记录
awk -F : '$1=="root" {print $0}' /etc/passwd
awk -F : '{ if($1=="root") print $0 }' /etc/passwd
----------------------------------------------------------
在awk中使用条件操作符
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
~ 匹配正则表达式
!~ 不匹配正则表达式
----------------------------------------------------------
#或/与运算
awk -F : '$1~/(root|shawn)/ {print $0}' /etc/passwd
awk -F : '$1~/root/ || $1 ~/shawn/ {print $0}' /etc/passwd
awk -F : '{if($1~/root/ || $1 ~/shawn/) print $0}' /etc/passwd
awk -F : '$6~/home/ && $6~/shawn/ {print $0}' /etc/passwd
awk -F : '{if($1~/root/ || ($1~/shawn/)) print $0}' /etc/passwd
awk -F : '{if($1~/root/ || ($1~/shawn/)){print $0} else {print "other:"$0}}' /etc/passwd
awk -F : '{if($0!~/^ntp.*nologin$/) print $0}' /etc/passwd
----------------------------------------------------------
#内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
FS 设置输入域分隔符,与-F同 *****
NF 记录域的个数 *****
NR 已读的记录数 *****
OFS 输出域分隔符 *****
ORS 输出记录分隔符
RS 控制记录分隔符
----------------------------------------------------------
#FS的用法,注意FS要加双引号
awk 'BEGIN {FS=":"}{print $1}' /etc/passwd

#内置变量用法
BEGIN{
FS=":"
}
{
print $1,$6
}
END{
print "ddddd"
}
----------------
BEGIN {
FS=":"
OFS="="
}
{
print $1,$6
}
----------------
BEGIN {
FS=":"
OFS="="
}
{
print "Row " NR ":" $1,$6
}
----------------

BEGIN {
FS=":"
OFS="="
}
{
print "Row " NR ":" $1,$6,$NF
}
END{
print "当前共有" NF "列"
}
awk -f myawk.awk /etc/passwd

----------------------------------------------------------
#求和
awk -F " " 'BEGIN { SUM=0 } { SUM = SUM + $5 } END{ print "总额为:" SUM}' ./ employee.txt

封装到脚本方式:
BEGIN{
FS=" "
sum=0
}
{
sum=sum+$5
}
END{
print sum
}

将执行awk命令封装到shell脚本:
vi myawk03_sh.sh
#!/bin/bash
total= awk -f ./myawk03.awk ./employee.txt
echo "$total"

运行:
./myawk03_sh.sh

-------------------------------------------------------
#求平均值一
BEGIN {
FS=":"
SUM=0
}
{
SUM = SUM + $5
}
END{
print "平均值为:" SUM / NR
}
#求平均值二
BEGIN{
FS=" "
SUM=0
NUM=0
}
{
if($5 ~ /[0-9]+/){
SUM = SUM + $5
NUM = NUM + 1
}
}
END{
print "平均值为:" SUM / NUM
}

#求最大值
BEGIN {
FS=" "
MAX=0
}
{
if ($5 > MAX){
MAX = $5
}
}
END{
printf("最大值为:%d\n", MAX)
}

awk -f test4.awk employee.txt
----------------------------------------------------------
#数组应用一
BEGIN{
FS = " "
}
{
line[NR] = $0
}
END{
i = 1
while (i <=NR) {
print line[i]
i = i + 1
}
}
-----------------------------------------------------------
#数组应用二
BEGIN{
FS = ":"
}
{
line[NR] = $2
}
END{
for(i=1;i<=NR;i=i+1){
print line[i]
}
}

===================================================
1、统计各科修课人数
vi countstu.txt
xiaoA math 90
xiaoB chiese 23
xiaoD English 45
xiaoC jichu 76
xiaoM math 23
xiaoY chiese 12
xiaoK math 56
xiaoY math 23
xiaoQ math 34
xiaoY jichu 12
xiaoP jichu 100

vi countstu.awk

{
Number[$2]++
}
END{
for(course in Number)
printf("%10s %d\n", course, Number[course])
}

运行:
awk -f ./countstu.awk countstu.txt
-------------------------------------------------------
2、awk实现wordcount案例
vi words.txt
wo shi tiancai
wo bu shi tiancai que ding ma

运行方式一:
vi wordcount.awk
{
for (i = 1; i<=NF; i++)
freq[$i]++
}
END{
for (word in freq)
printf "%s%d\n",word,freq[word]
}
运行:
awk -f wordcount.awk words.txt

运行方式二:
vi wordcount_awk.sh
#!/bin/sh
awk -F " " '{
for (i = 1; i<=NF; i++)
freq[$i]++
}
END{
for (word in freq)
printf "%s%d\n",word,freq[word]
}' $1

chmod u+x wordcount_awk.sh
./wordcount_awk.sh words.txt

作业2:要求:将案例1和案例2使用shell脚本封装并且执行
注意:我已经删除一些字符!!!!

案例3:查看NameNode服务是否启动,如果没有启动就启动NameNode
process=`jps|grep -v Jps|awk -F " " '{if($2=="NameNode")print $2}'`
if [ -z $process ]
then
echo "the process is not running,start to running Namenode process..."
path=$(which hadoop-daemon.sh)
$path start namenode
echo "the NameNode process is running..."
else
echo "the NameNode process is already run"
fi

执行:
/bin/bash ./myawk05.sh

案例4:重写一个hdfs的重启动文件
#!/bin/bash
#get all process
all=`jps | grep -v Jps | awk -F " " '{print $1}'`
if [ -n "$all" ] ; then
echo 'found hadoop process is running...'
jps | grep -v Jps | awk -F ' ' '{print "shutdown proccess > " $2}'
kill -9 `jps | grep -v Jps | awk -F ' ' '{print $1}'`
echo 'restart process that you need...'
if [ -f "$HADOOP_HOME/sbin/hadoop-daemon.sh" ]; then
#/opt/bigdata/hadoop-2.7.1/sbin/start-dfs.sh
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode
$HADOOP_HOME/sbin/hadoop-daemon.sh start secondarynamenode
fi
else
echo 'not found hadoop process is running...'
echo 'start process that you need...'
if [ -f "$HADOOP_HOME/sbin/hadoop-daemon.sh" ]; then
#/opt/bigdata/hadoop-2.7.1/sbin/start-dfs.sh
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode
$HADOOP_HOME/sbin/hadoop-daemon.sh start secondarynamenode
fi
fi

----------------------------------------------------------

如何将awk脚本结合shell使用
需求:判断hadoop用户是否存在
**************************************************
#!/bin/bash
result=`awk -F ":" '{if($1=="hadoop") print $1}' /etc/passwd`
if [ -n result ]
then
echo "the $result is exists"
fi
运行:
./myawk.sh

awk脚本结合shell使用的更多相关文章

  1. awk如何向shell传值

    今天写脚本,遇到awk脚本向shell传参的情况,上网谷歌一下,发现都有些麻烦,通过管道,通过eval,感觉都很复杂.于是想到用read来试一下. 首先构造一个测试文件test.txt,里面的内容是1 ...

  2. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  3. awk脚本

    $0,意即所有域. 有两种方式保存shell提示符下awk脚本的输出.最简单的方式是使用输出重定向符号>文件名,下面的例子重定向输出到文件wow. #awk '{print $0}' grade ...

  4. awk中引用shell变量的方法

    1.通过命令行参数定义变量时引用: awk -v awk变量名= shell变量名 #!/bin/bash var4bash=test awk -v var4awk="$var4bash&q ...

  5. Awk中调用shell命令

    Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...

  6. ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell

    最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...

  7. awk中使用shell的环境变量

    awk中使用shell的环境变量一:"'$var'"这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:var="test"awk 'BEGIN ...

  8. awk 脚本同时解析多个文件

    ARGC        The number of command line arguments (does not include                   options to gawk ...

  9. shell脚本学习—Shell执行脚本

    Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命 ...

  10. python调用脚本或shell的方式

    python调用脚本或shell有下面三种方式: os.system()特点:(1)可以调用脚本.(2)可以判断是否正确执行.(3)满足不了标准输出 && 错误 commands模块特 ...

随机推荐

  1. 10、操作系统安全加固-Linux加固

    1.账号管理与认证授权 1.1.为不同的管理员分配不同的账号 目的:根据不同用途设置不同账户账号,提高安全层级 实施方法: 1.设置高风险文件为最小权限,如:passwd.shadow.group.s ...

  2. VS Code侧边栏的“资源管理器”丢了

    选择"查看"下的"命令面板" 输入:View: Reset View Locations 所有的视图会恢复到默认的位置.

  3. C 语言编程 — 函数

    目录 文章目录 目录 前文列表 函数 函数的声明 函数的定义 函数的形参与实参 值传递 引用传递 可变长形参列表 函数的调用 函数的指针 回调函数 递归函数 数的阶乘 斐波那契数列 构造函数(Cons ...

  4. Pageoffice6 实现后台批量转PDF文档

    在实际项目开发中如果遇到批量动态生成PDF文档的需求,只需参考后台批量生成PDF文档,目前网上也有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的"方案 ...

  5. java学习之旅(day.13)

    常用类 Object类 object类是所有类的父类,所有类直接或间接继承object类 所有类,如果没书写extends显示继承某个类,都默认继承object类 getClass()方法 返回值是c ...

  6. TypeScript入门介绍

    目录 TypeScript入门介绍 什么是 TypeScript? 发展历史 优缺点 应用场景 开发工具 环境依赖 编程IDE vs调试 构建工具/工程化 步骤汇总 第一个项目 TypeScript入 ...

  7. 京东面试:如何进行JVM调优?

    JVM 调优是一个很大的话题,在回答"如何进行 JVM 调优?"之前,首先我们要回答一个更为关键的问题,那就是,我们为什么要进行 JVM 调优? 只有知道了为什么要进行 JVM 调 ...

  8. jsonp原理详解——终于弄明白了JSONP

    什么是JSONP? 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,着用自己的方式来阐释一下这个问题,看看是否有帮助. 1.一个众所周知的问题, ...

  9. 【web】自定义协议Protocol URL

    URL Protocol(自定义协议)可以让web页面调用本地exe程序,这个神奇的功能是怎么实现的呢? URL ProtocolURL Protocol,没错就是标题里所说的自定义协议.这玩意儿大家 ...

  10. itest work 开源接口测试&敏捷测试管理平台 9.5.0 GA_u4发布,优化及修复BUG

    (一)itest work 简介 itest work (爱测试)  一站式工作站让测试变得简单.敏捷,"好用.好看,好敏捷" ,是itest wrok 追求的目标.itest w ...