美文网首页
shell 统计常用

shell 统计常用

作者: leobupt | 来源:发表于2017-10-26 11:38 被阅读0次

    1. 目的

    数据统计中常用的shell命令
    目标用户: shell小白

    1.1 样例文本

    • file1
    级别,地区,企业级别,企业数量
    1,北京,A,1
    1,上海,B,2
    0,广东,C,3
    0,河北,D,4
    2,南京,E,5
    0,河北,F,6
    1,北京,G,7
    1,上海,H,8
    2,南京,I,9
    0,云南,J,10
    2,石家庄,A,10
    3,秦皇岛,B,20
    2,石家庄,C,30
    3,邢台,D,40
    0,广东,E,50
    1,北京,F,60
    2,石家庄,G,70
    3,邯郸,H,80
    3,新乡,I,90
    0,广东,J,100
    0,广东,J,1000
    

    1.2 命令

    参考: grep详解
    参考: cut命令详解
    参考: sed命令详解
    参考: awk语言详解

    2.场景

    2.1 查找

    • 找到包含"XX"的行
    # 场景一: 找到"北京"的行
    # 方法1:
    cat file1 | grep 北京
    # 方法2: 
    grep 北京 file1
    
    # 场景二: 找到包含"北京"或者"南京"的行
    # 方法1:
    cat file1 | grep -E "北京|南京"
    # 方法2:
    grep -E "北京|南京" file1
    
    # 场景三: 找到不包含北京的行
    grep -v 北京 file1
    
    # 场景四: 找到不包含北京和南京的行
    grep -vE "(北京|南京)" file1
    
    # 注意
    grep -vE "[北京|南京]" file1  # 是指包含“北”,“京”,“|”,“南”,“京”这四个字符的行
    
    • 按行查找
    # 场景1: 查找并打印出3-6行
    sed -n '3,6p' file1 # -n表示打印查找匹配的结果, 如果不加会打印整个file1
    
    • 按列查找
    # 场景1: 查找按","分割的第2列
    方法一: 
    cut -d','    -f2  file1 
    方法二: awk难度稍高, 可跳过
    awk -F','  '{print $1}'  file1 # $1表示按逗号分割的第1列, $0比较特殊表示整行
    # 场景2: 查找按","分割的第2-3列
    cut -d','   -f2-3 file1
    # 场景3: 某列值满足某种条件的行: 如大于N的行
    awk -F','  '$1>1{print $0}'   file1  # 输出第1列满足大于1的行
    

    2.2 替换

    • sed命令
    # 场景1: 替换文件全部的A词变为B词
    sed 's/hello/hi/g' file1
    # 场景2: 替换以A开头,替换为B
    sed 's/^3/B/g' file1   
    sed 's/$3/B/g' file1    # 每行以3结尾替换为B
    

    2.3 删除

    # 场景1: 删除文件第N行
    # 方法1: 结果保存到file2(注意: file1没有变化)
    sed '1d' file1 > file2 # 删除第1行
    sed '$d' file1 > file2 # 删除最后1行
    # 方法2: 直接将file1中第1行删除(注意: file1已变化)
    sed -i '1d' file1
    
    # 场景2: 删除第n到m行
    sed '2,4d' file1 > file2  # 删除2至4行,保持到file2, 其中file1不变
    sed -i '2,4d' file1  # 直接删除file1中2至4行,file1已改变
    
    # 场景3: 删除包含"XX"的行, 结果保存到file2
    # 方法1: 结果保存到file2(注意: file1没有变化)
    sed /北京/d  file1 > file2
    # 方法2: 直接将file1中包含"XX"的行删除(注意: file1已变化)
    sed -i /北京/d  file1
    

    2.3 排序

    # 场景一: 单列排序, file1第4列倒序排列
    cat file1 | sort -k4nr -t ',' 
    # 场景二: 多列排序, file1第1列倒序排列, 第2列倒序排
    cat file1 | sort -k1nr -k4nr -t ',' 
    # 分隔符: tab, 须加$符号
    cat file1 | sort -k1nr -k4nr -t $'\t' 
    

    相关文章

      网友评论

          本文标题:shell 统计常用

          本文链接:https://www.haomeiwen.com/subject/momhpxtx.html