首页 > 代码库 > 每天一个liunx命令3之awk实现文本文件的抓取

每天一个liunx命令3之awk实现文本文件的抓取

=============================================================================

grep -h -s -E ‘HUAWEI_900086000042331834|BAIDU_3266643378‘ /data/stat2/Log/LogStat_2017-05-17_000.log

    -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
    -s 不显示错误信息
    -E 意思是条件中是一个正则表达式,上例中搜索包含HUAWEI_900086000042331834或BAIDU_3266643378的信息

=============================================================================


统计文件中的行数
    awk ‘END{ print NR }‘ /data/stat2/Log/LogStat_2017-05-17_000.log

打印每一行的第二和第三个字段
    awk ‘{ print $2,$3 }‘ filename


awk -F "," ‘{OFS=",";if($2>1036) print $1,$2}‘ /data/stat2/Log/LogStat_2017-05-17_000.log
    将源文件/data/stat2/Log/LogStat_2017-05-17_000.log按照 , 分割   当每一行第二个字段大于1036时,输出第一个字段,和第二个字段   输出时按照 , 分割

    -F ","  将源文件按照 , 分割
    {} 括号内多个命令按照  分号 分割
    OFS=","  显示文件按照 , 分割 如果不写默认按照 空格 分割显示  
    if($2>1036)  判断函数   当第二个字段大于1036时,执行之后的语句
        if(表达式) 语句1 else 语句2
        或者  if(表达式) {语句1} else if(表达式) {语句2} else {语句3}
    print $1,$2  print输出函数  默认输出在控制台
        $n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 

        $0 这个变量包含执行过程中当前行的文本内容。


=============================================================================

grep和awk整合
    grep -h -s -E ‘HUAWEI_900086000042331834|BAIDU_3266643378‘ /data/stat2/Log/test/LogStat_2017-05-17_000.log | awk -F "," ‘{OFS=",";if($2>1003) print $0}‘
    第一个grep的结果作为awk的分析文本 然后结果默认是显示在控制台

=============================================================================


如何将上述结果保存到一个文件
    > 是把输出转向到指定的文件,如文件已存在的话也会重新写入,文件原内容不会保留
    >> 是把输出附向到文件的后面,文件原内容会保留下来
    grep -h -s -E ‘HUAWEI_900086000042331834|BAIDU_3266643378‘ /data/stat2/Log/test/LogStat_2017-05-17_000.log | awk -F "," ‘{OFS=",";if($6<1002) print $0}‘ >> /data/stat2/Log/test/test.txt


每天一个liunx命令3之awk实现文本文件的抓取