awk说明
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。
awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。
awk命令格式和选项
awk的语法有两种形式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
实例
ls -l |awk '/^d/ {print $NF}'
意思:ls -l
显示当前路径所有信息。
awk '/^d/ {print $NF}'
匹配记录中以d
开头的,也就是文件夹,并且打印最后一个字段。
也就是文件夹名。
注意:
NF其实是number of field, 即整行(或者说record)里面词 (更准确的翻译应该是域)的总数。
NF-1 就是倒数第二个字段
我做这一块的代码(写在jenkins脚本中的)
#!/bin/bash
export PATH=~/play-1.2.7:$PATH
#获得当前目录
cur=$(pwd)
echo "pwd:"${cur}
rm -rf ggservice-dataservice.jar
output_path=${cur}/classes
package=${cur}/package
echo $output_path
if [ ! -d $output_path ]; then
mkdir $output_path
fi
if [ ! -d $package ]; then
mkdir $package
fi
## 获取依赖库和需要编译的java文件
export libs=`find ./dataservice/lib -name "*.jar" |xargs|sed "s/ /:/g"`
export javafiles=`find ./dataservice/ -name "*.java" |xargs|sed "s/ / /g"`
export javautils=`find ./utils/app/ -name "*.java" |xargs|sed "s/ / /g"`
export play_lib=/opt/play-1.2.7/framework/play-1.2.7.jar
export play_lib_common=`find /opt/play-1.2.7/framework/lib/ -name "*.jar" |xargs|sed "s/ /:/g"`
#echo ${javafiles}
#echo "公共---------"
#echo ${javautils}
# 清除
rm -rf package/*
##编译
javac -d ${cur}/classes -cp ${libs}:$play_lib:$play_lib_common -encoding utf-8 ${javafiles} ${javautils}
##打包
cd /home/jenkins/workspace/ggservice/dataservice/app/ggservice/v1/
dir=$(ls -l |awk '/^d/ {print $NF}')
cd $output_path
for i in $dir
do
echo "ggservice-"${i}".jar打包情况":
jar -cvf ${package}/ggservice-${i}.jar */v1/$i/*
done
参考地址:
http://www.cnblogs.com/azheng007/p/3037246.html
http://www.zybang.com/question/fb3f19dae3ed24e8c96eb75c8acdae3e.html