IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    用shell命令处理数据

    侯爷 (truehyp@gmail.com)发表于 2016-09-03 00:00:00
    love 0

    前言

    有 2 份csv格式的数据,内容大概是这样的

    "riid:cb33ecb9-b76b-4633-9d80-26723838a0ba","1","32049683@JS"
    "riid:ced95b55-a3cb-4f24-b440-d56b5bf9f476","1","32000928@JS"
    "riid:87c1b470-1b4a-4969-95fc-09d39e1b2182","1","32010008@JS"
    

    第一列是主键,第二列是状态值,主要是比对这两列,一份文件中包含另一份中所有的riid,几万行至十几万行的数据,用excel处理,电脑卡的动不了,于是打算扔到 linux 下处理下,大致分为分列、去引号、排序、比对。

    分列

    我们不需要最后一列数据,可以将其去掉

    cat 1.csv |cut -d \, -f 1,2 > 2.csv
    

    -d 指定分隔符,在这里是逗号,-f 选择需要的字段,我们需要第一列和第二列,最后用重定向符号> 将截取的数据输出到文件。2.csv 的内容是这样的。

    "riid:cb33ecb9-b76b-4633-9d80-26723838a0ba","1"
    "riid:ced95b55-a3cb-4f24-b440-d56b5bf9f476","1"
    "riid:87c1b470-1b4a-4969-95fc-09d39e1b2182","1"
    

    去除引号

    引号没什么用,还影响比较,可以将其去掉。

    sed -i 's/"//g' 2.csv
    

    因为引号只出现在数据列两边,所以处理比较简单.

    riid:cb33ecb9-b76b-4633-9d80-26723838a0ba,1
    riid:ced95b55-a3cb-4f24-b440-d56b5bf9f476,1
    riid:87c1b470-1b4a-4969-95fc-09d39e1b2182,1
    

    排序

    排序很简单

    sort 2.csv -o 2.csv
    

    对2.csv 进行排序,结果输出到原文件。 也可以只按照某列排序

    sort -t, -k 1 2.csv -o 2.csv
    

    以逗号为分隔符,按第一列的字符升序进行排序,结果输出到原文件。

    比对

    接下来就可以比对了

    2 个文件中相同的部分

    comm -12 2.csv 3.csv
    

    2 个文件中状态值不一致的部分

    diff 1.csv 2.csv -y | grep \|
    


沪ICP备19023445号-2号
友情链接