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 |
|