您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

shell中最强大,实用的命令awk,梳理清楚就是这么简单

时间:2019-07-05 11:10:59  来源:  作者:
shell中最强大,实用的命令awk,梳理清楚就是这么简单

 

awk的工作模式

awk是一个文本处理工具,通常用于处理数据并生成结果报告

语法格式

第一种形式

awk 'BEGIN{}pattern{commands}END{}' file_name
shell中最强大,实用的命令awk,梳理清楚就是这么简单

 

语法格式解释

BEGIN正式处理数据之前

pattern匹配模式

{commands}匹配命令,可能多行

END处理完所有匹配数据后执行

第二种形式

standard output | awk 'BEGIN{}pattern{commands}END{}'

awk的内置变量

shell中最强大,实用的命令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/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

输出文件的每行内容

awk '{print $0}' /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

输出第二列内容

需要指定分隔符:

awk 'BEGIN{FS=":"}{print $2}' /etc/passwd

x
x
x

不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)

show.txt文件内容如下

# 空格分隔
Python JAVA php
# tab键分隔
flink	hadoop	storm
awk '{print $1}' show.txt

输出如下:

python
flink
shell中最强大,实用的命令awk,梳理清楚就是这么简单

 

输出每一行有多少列

awk '{print NF}' show.txt

输出如下

3
3

可以用这个输出每一行的最后一列的值

awk '{print $NF}' show.txt

输出行号

awk '{print NR}' show.txt

输出如下(没有混合使用,例子比较简单)

1
2

对每个文件的行号单独计数

awk '{print FNR}' show.txt /etc/passwd

同时指定行分隔符和列分隔符

show.txt的文件内容如下

python|java|php--flink|hadoop|storm

先输出每一行数据

awk 'BEGIN{RS="--"}{print $0}' show.txt

输入如下

python|java|php
flink|hadoop|storm

输出每一行的第二列

awk 'BEGIN{RS="--";FS="|"}{print $2}' show.txt

输出如下

java
hadoop

在上面基础上指定行分隔符

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|php
flink|hadoop|storm
awk '{print FILENAME}' show.txt

输入如下,因为是对行进行处理,所以有几行,输出几次文件名

show.txt
show.txt

使用

jps -l输入如下,运行的服务如下

34476 com.st.cis.main.WeiboSerachServer
4652 mbase-spider-parser-1.0.jar
43820 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 $pidfile
if [ $? -eq 0 ]
then
	echo "stop `hostname` kolink-xhs Success!"
else
	echo "stop `hostname` kolink-xhs Failed!"
fi


Tags:shell   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  Tags: shell  点击:(2)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  Tags: shell  点击:(18)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  Tags: shell  点击:(19)  评论:(0)  加入收藏
前言目标是一大学,在一次挖洞过程中遇到个sql注入,尝试进一步利用扩大危害,漏洞已报送平台进行了修复私信我获取网络安全学习资料 1.2000多本网络安全系列电子书 2.网络安全标...【详细内容】
2021-11-26  Tags: shell  点击:(21)  评论:(0)  加入收藏
如何在Linux环境中加密shell脚本?shell脚本包含密码,不希望其他具有执行权限的人查看shell脚本并获取密码。可以安装使用shc工具,普通用户无法读取shc创建的加密Shell...【详细内容】
2021-11-04  Tags: shell  点击:(41)  评论:(0)  加入收藏
ZheTian强大的远程加载和执行ShellCode工具,免杀shellcode加载框架命令详解-u string:从远程服务器加载base64混淆后的字节码。-r string:从本地文件内读。-s string:读取修改的...【详细内容】
2021-10-21  Tags: shell  点击:(76)  评论:(0)  加入收藏
最近工作中需要开发前端操作远程虚拟机的功能,简称 WebShell。基于当前的技术栈为 react+django,调研了一会发现大部分的后端实现都是 django+channels 来实现 websocket 服务。...【详细内容】
2021-09-13  Tags: shell  点击:(53)  评论:(0)  加入收藏
公众号:白帽子左一 专注分享渗透经验,干货技巧...本文由团队手电筒分享,如果你还是个小白担心看不懂,没关系,“三步写马””如何上传木马”“如何拿下服务器并妥善管理”等实战内...【详细内容】
2021-08-11  Tags: shell  点击:(115)  评论:(0)  加入收藏
shell脚本是一个命令语言,面向的是操作系统执行。如果写过shell脚本的话,应该体会过编写过程的痛苦。因为shell并不是一个编程语言,并不支持常见的数组,JSON等数据结构,也不支持...【详细内容】
2021-08-09  Tags: shell  点击:(109)  评论:(0)  加入收藏
redpill项目旨在帮助广大研究人员在后渗透任务中实现反向TCP Shell。在日常的红队活动中,我们经常需要使用非常规的方式来访问目标系统,比如说通过反向TCP Shell来绕过系统管...【详细内容】
2021-07-21  Tags: shell  点击:(118)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条