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 if
“BEGIN”{}//{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-08:00:00”的数据
筛选时间在2019-02-04-08:00:00和2019-02-04-08:30:03的数据
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 找到所有的匹配行,并显示匹配行后N行
3 -B 数字N 找到所有的匹配行,并显示匹配行前面N行
4 -b 显示匹配到的字符在文件中的偏移地址
5 -c 显示有多少行被匹配到
6 --color 把匹配到的字符用颜色显示出来
7 -e 可以使用多个正则表达式
8 -f FILEA FILEB FILEA在FILEAB中的匹配
9 -i 不区分大小写针对单个字符
10 -m 数字N 最多匹配N个后停止
11 -n 打印行号
12 -o 只打印出匹配到的字符
13 -R 搜索子目录
14 -v 显示不包括查找字符的所有行
Shell命令
最新推荐文章于 2025-08-04 13:34:57 发布
博客围绕Shell命令展开,虽未给出具体内容,但可知聚焦于信息技术领域的Shell命令相关知识。

290

被折叠的 条评论
为什么被折叠?



