Linux环境下命令行的数据处理案例

提取数据,涉及的功能又

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/

blogroll

social