提取数据,涉及的功能又
I、 1.合并文件 2.提取行(筛选) 3.拆分 截取 4.去重 5.排序
II、awk的介绍
命令行
1.手动执行
grep -i "start:js" Apache2017-11-15.log | cut -d "," -f 1 |cut -d ":" -f 2 | sort | uniq -i > /root/test/a.txt
wc -l a.txt
#grep -i "start:js" Apache2017-11-15 (2).log | cut -d "," -f 1 |cut -d ":" -f 2 | sort | uniq -i > /root/test/b.txt
grep -i "start:js" Apache2017-11-15\ \(2\).log | cut -d "," -f 1 |cut -d ":" -f 2 | sort | uniq -i > /root/test/b.txt
wc -l b.txt
cat a.txt b.txt | sort | uniq > /root/test/unionexample.txt
wc -l unionexample.txt
注意事项
-- 文件名含有空格以及括号等特殊字符
“\”告诉系统后面跟着的字符为原意,不是命令。比如有个文件名中带有空格,就要在空格前加一个“\”
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出
paste paste指令会把每个文件以列对列的方式,一列列地加以合并
split 分割文件 最大文件大小切割和按文本行数切割
cat 文件合并--列
2.自动化执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/bin/bash
#hintdate=$(date +%Y-%m-%d)
filelogname="Apache"
hintdate='2017-11-15'
hintfile=$filelogname$hintdate".log"
hintfile02=$filelogname$hintdate" (2).log"
#echo $hintfile #echo $hintfile02
grep -i "start:js" $hintfile | cut -d "," -f 1 |cut -d ":" -f 2 | sort | uniq -i > /root/test/c.txt
wc -l c.txt
date
注意事项--在shell中空格也是一个字符,所以在赋值等操作中,不要再"="左右留空格
shell语法要求变量名、等号、变量间不能有空格
方案二:
awk 'BEGIN{a="log";b="Apache";c=(a""b);print c}'
注释:
01.使用双引号"",来连接两边的字符串
02.任何在BEGIN之后列出的操作(在{}内)将在Unix awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。
因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果
03.awk命令,文本处理,通常用于日志分析与日常维护
一个完整的awk程序包含三部分:
01.BEGIN{} 的程序预处理部分,只在开始文件扫描前执行一次;
02.{} 程序主体部分,执行次数取决于目标处理文件的行数,每一行被扫描到时都会触发一次执行;
03.END{} 所有文件扫描完成后的触发执行一次,通常用作收尾的统计处理。
对于以上三个部分并不都是必须的,三者只需要具备其一就是一个合法的awk脚本,
但基于良好的编程习惯来说,建议无论是否会用到全部三个部分,也还是在代码文件中明确的标记上所有的结构
###建议数据处理-除了系统使用的,使用Python或者Perl来进行字符串和数据的处理
|
参考
AWK实战指南 ( 陈勇 gitbook ) https://book.saubcy.com/AwkInAction/