awk命令是linux下的一个文件管理命令,通常是用于文本和数据进行处理的编程语言,awk命令主要有两个功能,具体介绍如下:
1、awk命令可以在linux/unix下对文本和数据进行处理;
2、awk命令支持用户自定义函数和动态正则表达式。
参考范例:
比如打印每一行的第二和第三个字段,具体命令为:
[root@linuxcool ~]# awk '{ print $2,$3 }' file
awk命令的具体语法格式为awk [参数] [文件]。
参数:
-F 指定输入时用到的字段分隔符
-v 自定义变量
-f 从脚本中读取awk命令
-m 对val值设置内在限制
以上就是小编的分享了,希望能够帮助到大家。
shell中最强大,实用的命令awk,梳理清楚就是这么简单
awk的工作模式awk是一个文本处理工具,通常用于处理数据并生成结果报告
语法格式
第一种形式
awk 'BEGIN{}pattern{commands}END{}' file_name
语法格式 解释
BEGIN 正式处理数据之前
pattern 匹配模式
{commands} 匹配命令,可能多行
END 处理完所有匹配数据后执行
第二种形式
standard output | awk 'BEGIN{}pattern{commands}END{}'awk的内置变量
内置变量 含义
$0 整行内容
$1-$n 当前行的第1-n个字段(按照指定分隔符分割后)
NF(Number Field) 当前行的字段个数,也就是多少列
NR(Number Row) 当前行的行号,从1开始计数
FNR(File Number Row) 多文件处理时,每个文件行号单独计数,都是从0开始
FS(Field Separator) 输入字段分割符。不指定默认以空格或者Tab键分割
RS(Row Separator) 输入行分割符。默认回车\n
OFS(Output Field Sepatator) 输出字段分割符。默认为空格
ORS(Output Row) 输出行分隔符。默认为回车
FILENAME 当前输入的文件名字
ARGC 命令行参数个数
ARGV 命令行参数数组
看一下/etc/passwd文件的内容cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin输出文件的每行内容
awk '{print $0}' /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin输出第二列内容
需要指定分隔符:
awk 'BEGIN{FS=":"}{print $2}' /etc/passwdxxx
不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格 一个tab键)
show.txt文件内容如下
# 空格分隔python java php# tab键分隔flink hadoop storm
awk '{print $1}' show.txt
输出如下:
pythonflink
输出每一行有多少列awk '{print NF}' show.txt
输出如下
33
可以用这个输出每一行的最后一列的值
awk '{print $NF}' show.txt输出行号
awk '{print NR}' show.txt
输出如下(没有混合使用,例子比较简单)
12对每个文件的行号单独计数
awk '{print FNR}' show.txt /etc/passwd同时指定行分隔符和列分隔符
show.txt的文件内容如下
python|java|php--flink|hadoop|storm
先输出每一行数据
awk 'BEGIN{RS="--"}{print $0}' show.txt
输入如下
python|java|phpflink|hadoop|storm
输出每一行的第二列
awk 'BEGIN{RS="--";FS="|"}{print $2}' show.txt
输出如下
javahadoop
在上面基础上指定行分隔符
awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $2}' show.txt
输出如下
java&hadoop&
再次指定列分隔符
awk 'BEGIN{RS="--";FS="|";ORS="&";OFS="@@"}{print $1,$2}' show.txt
输出如下
python@@java&flink@@hadoop&输出文件名字
show.txt的文件内容如下
python|java|phpflink|hadoop|storm
awk '{print FILENAME}' show.txt
输入如下,因为是对行进行处理,所以有几行,输出几次文件名
show.txtshow.txt使用
jps -l输入如下,运行的服务如下
34476 com.st.cis.main.WeiboSerachServer4652 mbase-spider-parser-1.0.jar43820 kolink-xhs-1.0.jar
想关闭mbase-spider-1.0.jar这个jar包的服务,可以写一个如下脚本,非常方便,更高阶用法另开一篇文章好好写写
pidfile=`jps -l | grep 'mbase-spider-1.0.jar' | awk '{print $1}'`kill -9 $pidfileif [ $? -eq 0 ]then echo "stop `hostname` kolink-xhs Success!"else echo "stop `hostname` kolink-xhs Failed!"fi