Shell命令

博客围绕Shell命令展开,虽未给出具体内容,但可知聚焦于信息技术领域的Shell命令相关知识。

pwd 查看当前目录路径
cd 进入某目录
ll 查看当前文件夹文件详细信息

mkdir 创建文件夹

touch 创建文件

vi 编辑文件

vi命令编辑 i插入模式

vi命令 esc按键退出编辑
vi命令   :wq 保存
cat 查看文件

: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: q! (输入q!, 不存盘强制退出vi)
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字
r :替换光标所在处的字符。
R :替换光标所到之处的字符,直到按下「ESC」键为止
yy 复制光标所在位置的一行
#yy 复制从光标所在行数的#行
p 粘贴
u 取消操作
/ 查找关键字

cp 复制文件至目录

find -name 查找目录文件目录位置

find -name \*.txt 查询txt结尾的文件

find ./ -mtime 0
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件

100分钟内修改的文件

tail -f  log日志文件 查看日志动态命令


tttest.txt
appid														登录时间			事件			账号id		当前时间			年龄
68E7ECA1F0BC79230B504C05A07Q	1550966400	Paymen	account4	1550968203	17
68E7ECA1F0BC79230B504C05A07Q	1550966400	AccountCreate	account4	1550968203	17
68E7ECA1F0BC79230B504C05A07Q	1550966400	Online	account1	1550968203	16
68E7ECA1F0BC79230B504C05A07Q	1550966400	AccountCreate	account41	1550968203	22
68E7ECA1F0BC79230B504C05A07Q	1550966400	Online	account4	1550968203	17
68E7ECA1F0BC79230B504C05A07E	1550966400	AccountCreate	account1	1550968200	18
68E7ECA1F0BC79230B504C05A07E	1550966400	AccountCreate	account1	1550968200	18
8E7ECA1F0BC79230B504C05A07E	1550966400	AccountCreate	account2	1550968201	20
68E7ECA1F0BC79230B504C05A07E	1550966400	AccountCreate	account3	1550968202	21
68E7ECA1F0BC79230B504C05A07E	1550966400	AccountCreate	account4	1550968203	22
68E7ECA1F0BC79230B504C05A07E	1550966400	AccountCreate	account4	1550968203	22

awk命令


awk '{print $0}' tttest.txt    '{print $0}' 打印所有行

awk -vt=2{print $2+t}’ tttest.txt  -v变量赋值t=2  $2+t 第2列内容+2

awk -vt=2 '{print $2+t}' tttest.txt >2.txt  >2.txt保存到2.txt文件中

awk -F'\t' '{print $0}' tttest.txt   -F指定分隔符 \t是制表符

1.awk -F'\t' '/68E7ECA1F0BC79230B504C05A07Q/{print $0}' tttest.txt 
筛选 /68E7ECA1F0BC79230B504C05A07Q/

等于
2.awk -F'\t' '$1=="68E7ECA1F0BC79230B504C05A07Q"{print $0}' tttest.txt 
使用正则表达式'$1=="68E7ECA1F0BC79230B504C05A07Q"

3.awk -F'\t' '$1~"68E7ECA1F0BC79230B504C05A07Q"{print $4}' tttest.txt

不等于
1.awk -F'\t' '!/68E7ECA1F0BC79230B504C05A07Q/{print $0}' tttest.txt  
 '!/68E7ECA1F0BC79230B504C05A07Q/  !表示不等于

2.awk -F'\t' '$1!~/68E7ECA1F0BC79230B504C05A07Q/{print $0}' tttest.txt   
$1!~/68E7ECA1F0BC79230B504C05A07Q/  $1不等于68E7ECA1F0BC79230B504C05A07Q
打印使用符合条件的内容

大于
awk -F'\t' '$6>18{print $3,$4}' tttest.txt
'$6>18{print $3,$4}'  '$6>18打印{print $3,$4}'内容

awk -F'\t' '$6>18&&$6<22{print $3,$4}'  tttest.txt
18-22区间的事件,用户 使用&&(与)

awk-F'\t''$1~/68E7ECA1F0BC79230B504C05A07Q/||$1~/68E7ECA1F0BC79230B504C05A07E/{print $3,$4}'  tttest.txt 
输出68E7ECA1F0BC79230B504C05A07Q与(使用||68E7ECA1F0BC79230B504C05A07E

awk -F'\t' '($1~/68E7ECA1F0BC79230B504C05A07Q/||$1~/68E7ECA1F0BC79230B504C05A07E/)&&$6<18{print $0}' tttest.txt
||(与)&&(或)一起使用 使用()决定先后顺序

awk变量 -v声明变量,一个变量一个-v
awk -F'\t' -va=1 -vb=mark '/68E7ECA1F0BC79230B504C05A07Q/{print $6+a,$3b}' tttest.txt
数字连接用+,字符串连接不用符号,字符串+数字时字符串当作0 字符+数组=数字


NR 查看内置函数
查看文本行数

使用NR查看行数,查看id所有数据

使用NRR,查看id所有数据

查看id的行数,不写全部查看

NF 内置函数
awk -F'\t' '{print NF}' tttest.txt
文本被分成了6列

awk -F'\t' '/AccountCreate/{print NF,$0}' tttest.txt
查看创建账号的列

awk -F'\t' '/68E7ECA1F0BC79230B504C05A07Q/{print NF,$0}' tttest.txt
查看内容和显示列数,不写$0,只有列数

if 结构 {if(条件){命令}else if(条件){命令}...else{命令}}
awk -F'\t' '{if($1=="68E7ECA1F0BC79230B504C05A07Q"){print $0}}' tttest.txt
假如$1="68E7ECA1F0BC79230B504C05A07Q"打印"68E7ECA1F0BC79230B504C05A07Q"信息

awk -F'\t' '/68E7ECA1F0BC79230B504C05A07Q/{if($6<16){print $0}else{print "游戏不受众儿童"}}' tttest.txt
筛选出应用68E7ECA1F0BC79230B504C05A07Q下的16岁儿童,
否则返回 "游戏不受众儿童"
先筛选再判断,if else结构

统计成年人与未成年人个数

if 多层嵌套  某款游戏成年人个数,多重if

某款游戏成年人个数,cat  | grep 管道命令 在awk

新增用户和活跃用户统计(活跃用户等于新增用户+在线用户),利用if else ifBEGIN{}//{if(){}elseif(){}}END{}”
多命令执行{}隔开增加可读性
新增用户和活跃用户,付费用户统计  打印$1的列

循环 while
awk -F'\t' '{a=1}/Payme/{while(a<=NR){print $0;a++}}' tttest.txt

for (变量;条件;表达式){命令}
一行会有三个处理数据,每行都执行一个for循环,和编程语言的for循环要区分开来,因为awk是行处理器,处理完一行再处理下一行


date 输出当前时间 默认10位数字

date +%s 输出时间戳

date +%Y 输出年

date +%m 输出月

date +%d 输出日

date +%H 当前小时

date +%M 所在分钟

date +%S 当前秒

date +%Y-%m-%d-%H:%M:%S 打印当前时间

date +%Y-%m-%d' '%H:%M:%S 日期与时间隔开使用' '或者””

date -d "2019-03-06 20:32:26" +%s 指定时间戳

date -d@1551875546 时间戳转换为指定时间

date -d@1551875546  +%Y-%m-%d-%H:%M:%S
使用指定时间戳 获取指定时间格式

strftime是一种计算机函数,根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。
使用awk  + strftime打印$2时间
awk -F'\t' '{print strftime("%Y-%m-%d-%H:%M:%S",$2)}' tttest.txt

awk -F'\t' '{{a=strftime("%Y-%m-%d-%H:%M:%S",$5)}if(a >"2019-02-24-08:00:00"){print $0,strftime("%Y-%m-%d-%H:%M:%S",$5)}}' tttest.txt
打印时间大于“2019-02-04-080000”的数据

筛选时间在2019-02-04-0800002019-02-04-083003的数据
awk -F'\t' '{{a=strftime("%Y-%m-%d-%H:%M:%S",$5)}if(a >"2019-02-24-08:00:00"&&a <"2019-02-24-08:30:03"){print $0,strftime("%Y-%m-%d-%H:%M:%S",$5)}}' tttest.txt

在线时长排序
awk -F'\t' '{print $5-$2,$0}' tttest.txt  1803代表在线时长秒数

在线时长排序 显示不重复的 

cat tttest.txt |uniq -c
显示全部,并在第一行显示重复次数

cat tttest.txt |uniq -d  显示重复的

cat tttest.txt |uniq -u 显示不重复的

 cat tttest.txt |uniq -d |wc -l 显示重复数


awk -F'\t' '{if ($3=="AccountCreate"){print $3,$0}}' tttest.txt |uniq -u|wc -l  
4 创建账号的数量

按照年龄从大到小排序日志信息
cat tttest.txt |sort -k6 -r   -k表示列 -r表示从大到小排序

-u 去除重复行

cat tttest.txt |sort|uniq|wc -l   排序,重复,重复数

 awk 'BEGIN{a[0]="benben";a[1]="tietie";print a[0],a[1]}'
打印benebn tietie



jq 命令
jq  .  logdata-2019-02-25-13.log  排序查看全部

jq .header logdata-2019-02-25-13.log   输出筛选header内容 
查看第一层header数据

jq .header.uid  logdata-2019-02-25-13.log  header下面uid内容
查看第一层header数据里的uid数据

查看列表中的某个值
jq .event[1]  logdata-2019-02-25-13.log   [1] 这里表示读取第二个

jq .event[0].labelMap  logdata-2019-02-25-13.log 

jq .event[0].labelMap.age  logdata-2019-02-25-13.log 
event[0].labelMap下面的age

jq .event[0].labelMap._DES_AccountId  logdata-2019-02-25-13.log
event[0].labelMap下面的_DES_AccountId

jq .header.appId,.event[0].labelMap._DES_AccountId logdata-2019-02-25-13.log
查看appid 与._DES_AccountId 一层一层打开

jq '{appId:.header.appId,_DES_AccountId:.event[0].labelMap._DES_AccountId}' logdata-2019-02-25-13.log
‘{名称:,名称:}’

cat logdata-2019-02-25-13.log |jq '{appId:.header.appId}'

查找在线用户 s1b06efce09471fe0ee13ee42370cf19d
cat logdata-2019-02-25-13.log |grep s1b06efce09471fe0ee13ee42370cf19d |jq .event[0].eventId

cat logdata-2019-02-25-13.log |grep s1b06efce09471fe0ee13ee42370cf19d |jq .event[0].eventId |grep _DESelf_Online
2层筛选 在次使用|grep筛选_DESelf_Online

cat logdata-2019-02-25-13.log |grep s1b06efce09471fe0ee13ee42370cf19d |jq .event[0].eventId |grep _DESelf_Online |wc -l
统计在线数量 |wc -l

开发新加字段为mac放在header里面。怎么判断字段加成功了?
cat logdata-2019-02-25-13.log |jq '.header' |jq 'keys' |grep mac

cat logdata-2019-02-25-13.log |jq '.header' |jq 'has("mac")'
使用‘has’判断false  true

cat logdata-2019-02-25-13.log |jq '.event [].labelMap' |jq 'has("_DES_DcSync_Ts")'
开发加了一个字段在labelMap中为_DES_DcSync_Ts判断是否增加成功


正则表达式
常用元字符
代码	说明
.	匹配除换行符以外的任意字符
\w	匹配字母或数字或下划线
\s	匹配任意的空白符
\d	匹配数字
\b	匹配单词的开始或结束
^	匹配字符串的开始
$	匹配字符串的结束
常用限定符
代码/语法	说明
*	重复零次或更多次
+	重复一次或更多次
?	重复零次或一次
{n}	重复n次
{n,}	重复n次或更多次
{n,m}	重复n到m次
常用反义词
代码/语法	说明
\W	匹配任意不是字母,数字,下划线,汉字的字符
\S	匹配任意不是空白符的字符
\D	匹配任意非数字的字符
\B	匹配不是单词开头或结束的位置
[^x]	匹配除了x以外的任意字符
[^aeiou]	匹配除了aeiou这几个字母以外的任意字符
则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的。其中 -o 表示“only-matching”,即“仅匹配”之意。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大。
 cat 1.txt |grep -o "[a-zA-Z0-9_-]*@[a-zA-Z0-9_-]*[\.[a-zA-Z0-9_-]*]*"
使用正则表达式查找文件下的邮箱

cat 1.txt |grep -o "[a-z]*:[0-9]*"
查找文件中电话号码

查找文件"appId":"s1b06efce09471fe0ee13ee42370cf19d"
cat logdata-2019-02-25-13.log |grep -o "\"appId\":\"\w*\""

cat logdata-2019-02-25-13.log |grep -o "\"appId\":\"[^\"]*"

找到eventId的key值和value值

linux中wc命令用法
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
1.命令格式:
wc [选项]文件...
2.命令功能:
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
3.命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息

输出新增用户事件,并统计新增用户数量
wc -l 
cat logdata-2019-02-25-13.log |grep -o "\"eventId\":\"[^\"]*" |wc -l

cat logdata-2019-02-25-13.log |grep -o "eventId\":\"[^\"]*" |grep '_DESelf_Account_Create' |wc -l

查找appId|eventId 全部内容
cat logdata-2019-02-25-13.log |jq . |grep -E "appId|eventId" |awk '{print NR $0}'

cat logdata-2019-02-25-13.log |grep -o -E "appId\":\"[^\"]*|eventId\":\"[^\"]*"

awk -F'\n\' '{print $0}' logdata-2019-02-25-13.log |grep -o -E "appId\":\"[^\"]*|eventId\":\"[^\"]*"

打印时间戳
cat logdata-2019-02-25-13.log |grep -o -E ""\"startTime\":[0-9]*"|"\"endTime\":[0-9]*""

grep 下面所列的参数主要是一些常用的参数。
编号	参数	解释
1	--version or -V	grep的版本
2	-A 数字N	找到所有的匹配行,并显示匹配行后N3	-B 数字N	找到所有的匹配行,并显示匹配行前面N4	-b	显示匹配到的字符在文件中的偏移地址
5	-c	显示有多少行被匹配到
6	--color	把匹配到的字符用颜色显示出来
7	-e	可以使用多个正则表达式
8	-f FILEA FILEB	FILEAFILEAB中的匹配
9	-i	不区分大小写针对单个字符
10	-m 数字N	最多匹配N个后停止
11	-n	打印行号
12	-o	只打印出匹配到的字符
13	-R	搜索子目录
14	-v	显示不包括查找字符的所有行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值