Linux数据处理三剑客

news2024/11/22 22:34:12

目录:

  1. Linux 三剑客之 grep
  2. linux三剑客之awk
  3. linux三剑客之sed
  4. linux三剑客与管道使用
  5. 【实战】三剑客实战之nginx日志分析实战
  6. 【实战】三剑客实战之性能、网络统计实战
  7. linux进阶命令
  8. linux环境配置
  9. Linux与Bash编程实战

1.Linux 三剑客之 grep

内容检索:(注意:pattern 是模式参数,可以是一个正则表达式或简单的文本匹配。)

获取行 grep pattern file:(这个命令用于在文件中搜索匹配给定模式(pattern)的行。模式可以是正则表达式或简单的文本匹配。该命令返回所有匹配的行,不进行任何排序或过滤。

获取内容 grep -o pattern file (这个命令与上一个命令类似,但它只返回匹配模式的行,而不是整个行。这意味着它会返回匹配模式的文本行,而不是包含这些文本的行。

获取上下文 grep -A -B -C pattern file(将返回匹配模式的行,并显示匹配行的前2行和后3行,以及匹配行的上下文(即匹配行的前1行和后1行)。

-C:理解-C参数 ,返回匹配行的前2行,后俩行

文件检索:

递归搜索 grep pattern -r dir/

展示匹配文件名 grep -H pattern file

 只展示匹配文件名 grep -l pattern file

范围约束:

忽略大小写 grep -i pattern file

不显示匹配的行 grep -v pattern file

使用扩展正则表达式 grep -E pattern file

文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*"(这个命令将搜索 /tmp/demo/ 目录及其子目录中以 111 开头的文件,并输出包含文本 111 的行。

进程检索:  

进程过滤场景比较特殊,需要注意 grep 本身会开启新进程,所以需要单独过滤掉 grep 进程

ps -ef | grep ssh

ps -ef | grep ssh | grep -v grep

2.linux三剑客之awk

awk简介:

awk是一个强大的文本处理工具,它可以用于处理各种类型的文本数据,包括文件、管道、标准输入等。awk命令可以对文本进行逐行处理,并且可以根据指定的规则对文本进行格式化和输出。

awk命令的主要功能包括:

  1. 逐行处理文本:awk命令可以从文件或标准输入中读取文本,并对每一行进行处理。可以使用awk命令对每一行进行操作,例如查找、替换、删除等。
  2. 数据格式化:awk命令可以对文本进行格式化输出,例如按照指定的格式对文本进行分行、缩进、对齐等。
  3. 变量和条件语句:awk命令可以使用变量和条件语句来控制处理流程,例如根据指定的条件对文本进行过滤、选择、排序等操作。
  4. 函数和宏:awk命令可以使用自定义函数和宏来扩展其功能,例如定义自定义函数来处理特定的文本操作。

awk命令通常与其他命令和工具结合使用,例如cat、find、ls等,以便更有效地处理大规模的文本数据。awk命令可以用于各种应用程序,包括数据处理、数据分析、文件格式转换、文本解析等。

awk 基本语法:

  • awk 是 linux 下的一个命令,同时也是一种语言解析引擎
  • awk 具备完整的编程特性。比如执行命令,网络请求等
  • 精通 awk,是一个 linux 工作者的必备技能
  • 语法 awk 'pattern{action}'

awk 上下文变量:

  • 开始 BEGIN 结束 END
  • 行数 NR
  • 字段与字段数 $1 $2 .. $NF NF
  • 整行 $0
  • 字段分隔符 FS
  • 输出数据的字段分隔符 OFS
  • 记录分隔符 RS
  • 输出字段的行分隔符 ORS

 字段变量用法:

  • -F 参数指定字段分隔符,可以用|指定多个- 多分隔符 -F ‘<|>’
  • BEGIN{FS=“_”} 也可以表示分隔符
  • $0 代表当前的记录
  • $1 代表第一个字段
  • $N 代表第 N 个字段
  • $NF 代表最后一个字段
  • $(NF-1) 代表倒数第二个字段

pattern 表达式:

  • 正则匹配 $1~/pattern/ /pattern/
  • 比较表达式 $2>2 $1=="b" 

awk pattern 匹配表达式案例:

  • 开始和结束 awk 'BEGIN{}END{}'
  • 正则匹配
    • 整行匹配 awk '/Running/'
    • 字段匹配 awk '$2~/xxx/'
  • 行数表达式
    • 取第二行 awk 'NR==2'
    • 去掉第一行 awk 'NR>1'
  • 区间选择
    • awk '/aa/,/bb/'
    • awk '/1/,NR==2'

 action 行为表达式 {action}:

  • 打印 {print $0} {print $2}
  • 赋值 {$1="abc"}
  • 处理函数
  • 原始内容 $0
  • 更新后内容 {$1=$1;print $0} 

 单行转多行:

echo 1:2:3 | awk 'BEGIN{RS=":"}{print $0}'

多行变单行:

echo '1

2

3' | awk 'BEGIN{RS="";FS="\n";OFS=":"}{$1=$1;print $0}' 

计算平均数:

echo '1,10

2,20

3,30' | awk 'BEGIN{total=0;FS=","}{total+=$2}END{print total/NR}' 

awk 的词典结构 array:

  • array 是稀疏矩阵,类似 python 的词典类型
  • 统计多家机构的营业额
  • 统计多家机构的营业额平均值

统计多家机构的营业额

echo 'a, 1, 10

a, 2, 20

a, 3, 30

b, 1, 5

b, 2, 6

b, 3, 7' | awk '{data[$1]+=$3}

END{for(k in data) print k,data[k]}'

统计多家机构的营业额平均值

echo 'a, 1, 10

a, 2, 20

a, 3, 30

b, 1, 5

b, 2, 6

b, 3, 7' | awk '{data[$1]+=$3;count[$1]+=1;}

END{for(k in data) print k,data[k]/count[k]}'

 The GNU Awk User’s Guide

sed, a stream editor

GNU Grep 3.11

3.linux三剑客之sed

sed命令可以读取文本文件,并使用一系列指令对文本进行修改、删除、插入、替换等操作。sed命令通常用于处理文本数据,例如查找、替换、格式化、排序等。 

sed 基本语法与常用参数

  • 语法结构 sed [addr]X[options]
  • -e 表达式
  • sed -n ‘2p’ 打印第二行
  • sed ‘s#hello#world#’ 修改
  • -i 直接修改源文件
  • -E 扩展表达式
  • –debug 调试

 sed pattern 表达式

  • 行数与行数范围 20 30,35
  • 正则匹配 /pattern/
  • 区间匹配 //,//

sed action 表达式

  • p 打印,通畅结合-n 参数:sed -n ‘2p’
  • s 查找替换:s/REGEXP/REPLACEMENT/[FLAGS]
  • d 删除,删除前两行 sed ‘1,2d’
  • a 追加
  • c 改变
  • i 插入内容到匹配行之前
  • e 执行命令
  • 分组匹配与字段提取:sed ‘s#([0-9])|([a-z])#\1 \2#’ 

行数操作

  • 打印特定行 sed -n 2p
  • 删除最后一行 sed $d

s 表达式

  • s 表示替换
  • s 后面的追加字符可以为任意字符
  • g 表示全局匹配
  • & 表示匹配内容

echo a:b:c | sed 's/:/123&/'

a123:b:c

echo a:b:c | sed 's/:/&123/'

a:123b:c

echo a:b:c | sed 's#:#|#g'

a|b|c

反向引用

  • 使用()对数据进行分组
  • 使用\1 \2 反向引用分组

echo 0 1 2 3 4 | sed -E 's#([1-3]) ([1-3]) ([1-3])#\3 \2 \1#'

0 3 2 1 4

Linux 三剑客实战 

日志数据检索

找出 log 中的 404 500 的报错 考察严谨性

find_error_log() {

less nginx.log | grep -E '(" 404 |" 500)'

less nginx.log | grep '$9~/404|500/'

}

上下文检索

找出 500 错误时候的上下文 考察 grep 高级用法

日志数据统计

找出访问量最高的 ip 统计分析

数据文件修改

找出访问量最高的页面地址 借助于 sed 的统计分析

 参考资料

  • 高级 Bash 脚本编程指南
  • LINUX 与 UNIX SHELL 编程指南
  • 鸟哥的 Linux 私房菜
  • Bash 官方文档
  • 阮一峰的《bash 脚本教程》
  • Google

4.linux三剑客与管道使用

程序运行环境输入与输出:

  • 标准输入 0
    • read a;echo $a
  • 标准输出 1
    • echo ceshiren.com
  • 错误输出
    • ls not_exist_dir

PlantUML diagram

管道重定向

  • 管道与管道之间可以重定向
  • 管道与文件之间可以重定向

echo 11 > /tmp/aaa.txt

read var </tmp/aaa.txt

echo  $var

ls not_exist_dir > /tmp/aaa.txt

ls not_exist_dir > /tmp/aaa.txt 2>&1 

PlantUML diagram

管道连接符 | 

  • 管道连接符 | 可以连接多个程序的执行
  • 管道连接是以子进程的方式启动的

echo myname | { read line; echo input is $line; } 

管道执行的上下文控制 

  • 使用 { command; } 注意花括号与内部命令之间的空格与分号
  • 使用控制逻辑 while read 组合
  • 使用 $() ``

#这个方式无法获得变量x

echo hello world | read x;

echo $x

#如下两个方式可以获得变量x

echo hello world | { read x; echo $x; }

echo hello world | while read x; do echo $x;done

Linux 三剑客介绍 

grep
global search regular expression(RE) and print out the line 基于正则表达式查找满足条件的行

awk
名字来源于三个作者的名字简称
根据定位到的数据行处理其中的分段

sed
stream editor
根据定位到的数据行修改数据

>

与 SQL 的对比

Linux 三剑客SQL Structured Query Language
grep 数据查找定位select * from table like ‘%xx’
awk 数据切片select field from table
sed 数据修改update table set field=new where field=old

 BRE 基本正则表达式

  • ^ 开头 $结尾
  • [a-z] [0-9] 区间,如果开头带有^表示不能匹配区间内的元素
  • * 0 个或多个
  • . 表示任意字符

ERE 扩展正则表达式

  • 基本正则表达式(BRE)基础上的扩展
  • ? 非贪婪匹配
  • + 一个或者多个
  • () 分组
  • {} 范围约束
  • | 匹配多个表达式的任何一个

5.【实战】三剑客实战之nginx日志分析实战网络统计实战 

 找出 log 中的 404 500 的报错 考察严谨性

less nginx.log | grep -E '(" 404 |" 500)'

less nginx.log | grep '$9~/404|500/'

找出访问量最高的ip,统计分析,取出top3的ip和数量,打印出来

 less nginx.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -3

6.【实战】三剑客实战之性能、网络统计实战

进程 

  • top
  • ps

常用性能命令 

统计一个进程的实时cpu数据需要用到哪个命令? 

 封装自己的ps命令:

ps_ex ()
{
    ps -o uname,pid,ppid,thcount,ni,pri,psr,pcpu,pmem,rss,vsz,sz,start_time,time,comm,c,command,args "$@"
}

统计aliyundun的性能:

perf_get ()
{
    top -b -d 1 -n 20 | grep --color=auto --line-buffered -i yundun$ | awk 'BEGIN{print "cpu","mem"}{cpu+=$9;mem+=$10;print $9,$10}END{print "";print cpu/NR,mem/NR}'
}

网络:

  • netstat -tlnp
  • netstat -tnp

网络命令:

  

统计连接网络链接情况 :

connection_summary() {
    netstat -tn |
        awk 'NR>2{print $4,$6}' |
        awk -F: '{print $2}' |
        sort | uniq -c | sort -nr |
        awk '{print $2"\t"$3"\t"$1}'
}

7.linux进阶命令

GET:

-G:使用get请求
- d:指定请求数据
curl https://www.baidu.com

curl -G https://www.baidu.com
curl -X GET https://www.baidu.com

POST:

- d:指定post请求体
curl -d 'login=1234' https://www.baidu.com

curl -X POST https://www.baidu.com

Other: 

保存响应内容

  • curl -o tmp.html https://www.baidu.com

输出通信的整个过程

  • curl -v https://www.baidu.com

不输出错误和进度信息

  • curl -s https://www.baidu.com

jq: 

一个 jq 程序是一个过滤器

它接受一个输入并产生一个输出

官网:jq

简单使用:

 . 格式优化

echo '{"a":11,"b":12}' | jq '.'

常用方法 :

内容提取:

echo '{"foo": 42, "bar": "less interesting data"}' | jq .foo

从数组中提取单个数据:

echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0]

从数组中提取所有数据:

echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[]

过滤多个值:

echo '[{"a":1 ,"b":2},{"c":3,"d":4}]' | jq .[0,1]

数据重组成数组:

echo '{"a":1,"b":2,"c":3,"d":4}' | jq '[.a,.b]'

数据重组成对象:

echo '{"a":1, "b":2,"c":3,"d":4}' | jq '{"tmp":.b}'

8.linux环境配置

应用安装

  • 平台自带的 app store:
    • yum @centos/redhat
    • apt-get @ubuntu debian
    • scoop winget @windows
  • 特定平台版本管理工具 pyenv nvm
  • 安装包安装 pkg dmg
  • 源码编译安装 make ; make install

redhat/centos 平台示例

  • yum search $package
  • yum install $package
  • yum remove $package

ubuntu/debian 平台

  • apt-cache search $package
  • apt-get install $package
  • apt-get uninstall $package

 开源镜像站

  • 华为:https://mirrors.huaweicloud.com/
  • 阿里云:https://developer.aliyun.com/mirror/

9.Linux与Bash编程实战

统计 /home 目录下不同用户的普通文件的总数是多少:

find /home -type f -printf "%u\n" | sort | uniq -c

 

统计 netstat -anp 状态为 LISTEN 和 CONNECT 的连接数量分别是多少:

netstat -anp | grep LISTEN | wc -l
netstat -anp | grep CONNECT | wc -l

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高电压放大器ATA-2021B在无损检测领域中的应用

超声无损检测&#xff08;UltrasonicNondestructiveTesting&#xff0c;简称UT&#xff09;是一种常用的材料及构件内部缺陷检测技术。它利用超声波在材料中传播的特性&#xff0c;通过接收回波信号来检测材料内部的缺陷情况。超声无损检测具有精度高、快速、非破坏性等优点&am…

k8s Webhook 使用java springboot实现webhook 学习总结

k8s Webhook 使用java springboot实现webhook 学习总结 大纲 基础概念准入控制器&#xff08;Admission Controllers&#xff09;ValidatingWebhookConfiguration 与 MutatingWebhookConfiguration准入检查&#xff08;AdmissionReview&#xff09;使用Springboot实现k8s-Web…

【录用案例】2区SCI,仅14天见刊!

近日新增两本2区SCI录用&#xff0c;期刊表现质量优&#xff0c;均是隶属于世界前列的出版社&#xff0c;好刊版面紧俏&#xff0c;可放心投稿&#xff01;录用案例如下&#xff0c;可重点参考&#xff1a; 计算机科学类SCI&EI 【影响因子】IF&#xff08;2022&#xff0…

Microsoft todo 数据导出

文章目录 官方说明&#xff1a; https://support.microsoft.com/zh-cn/office/导出您的-microsoft-待办事项帐户-d286b243-affb-4db4-addc-162e16588943 由于 微软待办 会自动与 Outlook 中的任务同步&#xff0c;因此您可以从 Outlook 中导出所有列表和任务。 若要导出列表和…

Docker 安全 Docker HTTPS请求过程与配置

Docker 容器安全注意点 尽量别做的事 尽量不用 --privileged 运行容器&#xff08;授权容器root用户拥有宿主机的root权限&#xff09; 尽量不用 --network host 运行容器&#xff08;使用 host 网络模式共享宿主机的网络命名空间&#xff09; 尽量不在容器中运行 ssh 服务 尽…

11.对象

11.1什么是对象 ●对象(object) : JavaScript里的一种数据类型 ●可以理解为是一种无序的数据集合&#xff0c;注意数组是有序的数据集合 11.2对象的使用 1.对象的声明语法 &#xff08;1&#xff09;let对象名 {} &#xff08;2&#xff09;let对象名new Object() // {} …

vue实现flv格式视频播放

公司项目需要实现摄像头实时视频播放&#xff0c;flv格式的视频。先百度使用flv.js插件实现&#xff0c;但是两个摄像头一个能放一个不能放&#xff0c;没有找到原因。&#xff08;开始两个都能放&#xff0c;后端更改地址后不有一个不能放&#xff09;但是在另一个系统上是可以…

振弦采集仪及在线监测系统完整链条的岩土工程隧道安全监测

振弦采集仪及在线监测系统完整链条的岩土工程隧道安全监测 近年来&#xff0c;随着城市化的不断推进和基础设施建设的不断发展&#xff0c;隧道建设也日益成为城市交通发展的必需品。然而&#xff0c;隧道建设中存在着一定的安全隐患&#xff0c;如地质灾害、地下水涌流等&…

Python(四十三)else语句

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

实用人工智能 2.0,在线“学习、探索和构建”ML 模型

人工智能爱好者过去需要在一个好的GPU上投资数千美元才能“动手”进行机器学习&#xff0c;但现在一个简单的网络浏览器就足够了。总部位于硅谷的非营利组织PracticalAI最近发布了“PracticalAI2.0”&#xff0c;该平台包括TensorFlow 2.0Keras中的说明性机器学习课程&#xff…

吉客云对接打通金蝶云星空分页查询出库单接口与其他出库新增接口

吉客云对接打通金蝶云星空分页查询出库单接口与其他出库新增接口 对接系统吉客云 杭州吉客云网络技术有限公司是经国家认定的高新技术企业&#xff0c;是国内领先的SaaSERP软件服务商&#xff0c;致力于为企业提供安全稳定、高可用性和高扩展性的一站式数字化解决方案。 接通系…

如何全面评价国内的低代码开发平台 (apaas)?

低代码开发平台是无需编码&#xff08;0代码&#xff09;或通过少量代码就可以快速生成应用程序的开发平台。 通过可视化进行应用程序开发的方法&#xff08;参考可视编程语言&#xff09;&#xff0c;使具有不同经验水平的开发人员可以通过图形化的用户界面&#xff0c;使用拖…

SpringBoot网上宠物领养管理系统【纯干货分享,免费领源码05971】

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;宠物行业当然也不例外。网上宠物领养管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff…

持续进化 | MWORKS 2023b正式上线,更新要点一文速览!

6月30日&#xff0c;同元软控成功举办MWORKS 2023b产品发布会&#xff0c;会上公布了新版MWORKS的产品特性、重大改进、关键技术以及设计理念。7月21日&#xff0c;科学计算与系统建模仿真平台MWORKS 2023b正式上线&#xff0c;开放下载。 此次更新的2023b版本带来了8个工具的重…

线段树----logn时间维护查询区间和/最大值/最小值

线段树 引入 线段树是算法竞赛中常用的用来维护 区间信息 的数据结构。 线段树可以在 O(\log N) 的时间复杂度内实现单点修改、区间修改、区间查询&#xff08;区间求和&#xff0c;求区间最大值&#xff0c;求区间最小值&#xff09;等操作。 线段树的区间修改与懒惰标记 …

Day44 算法记录| 动态规划 10 (股票问题)

股票问题 123.买卖股票的最佳时机III188. 买卖股票的最佳时机 IV 123.买卖股票的最佳时机III 方法一&#xff1a;二维数组的讲解&#xff1a; class Solution {public int maxProfit(int[] prices) {int day prices.length;int[][] dp new int[day][5];//初始化dp[0][1] -p…

教你使用PHP实现一个轻量级HTML模板引擎

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。多年电商行业从业经验&#xff0c;对系统架构&#xff0c;数据分析处理等大规模应用场景有丰富经验。 &#x1f3c6;本文已收录于PHP专栏&#xff1a;PHP…

Ubuntu系统下:write_frames() got an unexpected keyword argument ‘audio_path‘

在部署Datid3d项目是遇到了一个imageio_ffmpeg的报错问题&#xff0c;网上也没有解决办法&#xff0c;在github上查看这个开源库时发现这个库的0.4.3和0.4.8的版本有差别&#xff0c;具体情况如下图&#xff1a; 0.4.3版本&#xff1a; 0.4.8版本&#xff1a; 我原先装得的是0…

AD 封装组件的水平/垂直间距报错

快捷键&#xff1a;D设计→R规则 一般情况下设置的都是&#xff1a;Electrical 下的Clearance 但是设置完了还是继续报错 是封装之间的水平间距问题 应该设置Placement 下的ComponentClearance

某网站搜索接口参数MD5加密又加盐逆向实战分析

1. 写在前面 最近在写爬虫的时候发现一些小网站上的MD5加密&#xff0c;在我们团队开发的千把个网站爬虫内发现这种MD5加密的案例还不少&#xff01;话不多说&#xff0c;直接拿出来分析一波 之后我准备抽时间总结出一个关于如何快速搜索与定位JS加密函数与分析与辨别常见加密…