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

Linux命令行中的数据处理,在进行数据处理之前,需要获得数据以及对数据进行必要的数据预处理。

Linux中对数据的清洗

类型--纯文本的数据清洗以及原始数据的提取等
01.行列的处理
    行过滤 
    列分割 列合并 列抽取 
    单词提取    值替换  缺失数据处理
02.数据格式转换
        csv  json xml等

01.查看类型

显示--显示文档和目录,显示文档内容,显示变量,
显示进程,显示资源
   显示目录和文档
        pwd() ls()  tree()
  显示文档内容
     分页显示-- less more  head  tail  grep
     全部显示-- cat
  显示变量
     显示变量--echo  print  type  env
  显示资源
    who  hostname  data   cal
  显示进程
     ps()    pstree()
  显示网络
    ifconfig   netstat

02.查找--遍历 搜索

<索引技术-名称-位置-模式-关系>
    whereis
    find  locate
    which
ls  /home | wc -l
find  /usr  -name ascii

03.数据化处理-- 管道-正则表达式-shell脚本--命令风格

常见操作
    00.数据来源
        下载 
        解压  unzip  tar
    01.查看-查找--动作
        定位
        whereis
        find  /  -name  yt
        find /   -type  
        过滤--筛选--抽取  cut
        删除--替换
            tr
            sed
        排序 sort
        连接--拼接--分割-分列
       文件 split
            fieldsplit
            paste
        创建---移动--清除 -- 
            创建  mkdir
            移动和改变 cd  mv  cp  chmod
            清除  rm   rmdir  kill
        对比: cmp  comm   diff   sdiff
    02.汇总-- wc     <Word Count) line  word character>
    03. 删除重复值  查找重复值
          uniq

04.CSV格式文件处理

csvcut--  从CSV 数据中抽取列
csvgrep 过滤表格数据
csvlook         csvstat
csvsort  对CSV文件排序
csvsql          csvstack  行堆积               csvjoin
header
日期 dseq         数字 seq

05.数据格式变换:

格式转换
    xml2json
    json2csv
设置--
    export   git   ssh    sudo

文字和文本处理

01.文字处理软件
        01.所见即所得:OpenOffice
        02.Latex编辑器
02.文本编辑器--三种类型  
        01.Gedit
        02.Vim Emacs   交互式文本编辑器
        03.sed awk         非交互式上下文编辑器
                                优势:提前涉及命令,将命令发送给程序,程序自动执行
                                不足:缺乏相对地址(由于操作是每次一行的),和缺乏对命令如期运行的立即验证
    其他:markdown-- MarkdownPad
Linux上文本处理三大剑客
    1 grep:文本过滤(模式:pattern)工具; *(grep, egrep, fgrep)
    2 sed:stream editor,文本编辑工具;
    3 awk:Linux上的实现gawk,文本报告生成器;
在不同平台上的shell脚本,在Windows下的编辑脚本,文件的是DOS文件格式,在Linux下执行
需要(替换原始文件或者不替换原始文件,产生新的文件)
    01.替换Tab键
    02.文件格式从DOS转换为Unix

01.替换Tab键

在Windows平台--替换  先按Tab键,出来一个,然后复制或者剪切
                                            ctr+R  替换 为空格
在Linux平台下
            方式一:交互式编辑
                    TAB替换为空格:
                    vim  dos.txt  
                    进入编辑模式 -(按下 'a  A    O  o    I  i'  )
                            :set ts=4
                            :set expandtab
                            :%retab!
            方式二:非交互式编辑--不替换原始文件,产生新的文件
                将linux文件中的tab更换为空格的三种方法
                    1,用sed命令
                    sed 's/\t/ /g' filename >filename1
                    2,  用tr命令
                    cat filename|tr  "\t" " " >filename2
                    3,用col -x命令
                    cat filename|col -x >filename2
                确认方式:统计文件的字符 wc -l filename

02.将文件格式从DOS转换为Unix

方式一:交互式编辑--使用Vim
      vim  dos.txt    
     进入编辑模式-- (按下 'a  A    O  o    I  i'  )
    :set fileformat=unix
    :w 
   查看确认:    
    :set ff  ?       可以看到dos或unix的字样.
    :q  
  注释:01.回退到一般模式  按下Esc键
                命令行模式  :  ? /
            02.离开 :q    强制离开:q!
               保存 :w
               保存离开 :wq 
方式二:非交互式编辑              
    可以用sed 这样的工具来做:
  sed 's/^M//'  filename > tmp_filename
  其中^M是同时Ctrl+V+M按出来的,表示回车。
   方法二
      sed 's/.$//'  filename > tmp_filename

查看---

  分屏查看:less tail head  grep
  全部查看:cat
    echo 'realtion' >   ~/testrelation.txt
    echo '$example_data',  $example_data   >> ~/testrelation.txt

编辑器:

    交互式编辑器  : Vim    Emacs  gedit
    非交互式编辑器:    sed    awk
01.sed --新增--删除--替换<整行替换和部分替换>
  #!/bin/bash
--简单变量的替换
sed -i "[/address|pattern/]s/serach/replace/g" 
    其中address 是输入流的一个或者多行的地址
      pattern是一个字符串
      search 是正则表达式-搜索文本
      replace是替换文本
 在这个替换中,注意事项有三点
    01.属于非交互式编辑还是交互式
    02.改变原文件和不改变原文件
    03.最外面的命令是单引号还是双引号
    04.特殊字符的处理以及对结果的验证
    sed  -e 's/$terday/'$terday'/g'  \
         -e 's/today_s/'today_s'/g'  \
        -e 's/$lastday/'$lastday'/g'  /example/test/amp.sh  > /example/test/amp.sql
  使用-i选项可以直接在原文件进行修改,
    系统会将sed原本输出到屏幕的内容输出到一个以sed开头的临时文件,
    处理完毕后他会将这个临时文件替换原本的文件,如果运行的时候出现错误,这个临时文件就不会被删除,一直留在那里
    #变量定义
    example_data=$(date +%Y-%m-%d)
    --简单变量的替换
    sed -i "s/原字符串/新字符串/g"    
    sed  's/insert / --insert /g'  example.sh
    sed  's/use / example_data /g'  example-2.sh
    -- 替换成对应的日期
    sed  's/use / 'example_data' /g'  example-2.sh
    ##
    sed  's/ example_data / use /g'  example-2.sh
    ##特殊对特殊
    ##--sed单引号--变量不带单引号的
    sed  's/ '\example_data' / 'example_data' /g'  example-2.sh
    ##sed带单双引号的  --变量带有单双引号的
    sed  "s/ \\'example_data\\' / 'example_data' /g"  example.sh
    sed  's/ "example_data" / 'example_data' /g'  /root/example-2.sh
  查看
  nl /etc/passwd | sed '12,15d'
    nl /etc/passwd | sed '12,17p'
    nl /etc/passwd | sed -n  '12,17p'
02.awk--动作以单引号括住
    去重
 awk '!a[$0]++{print $0}' file1
 解释说明:
这个是经典的去重的写法,如果$0是第一次出现的话,a[$0]的结果为0,!的结果是1,
在进行++操作的话a[$0]结果就变称了1,从而进行输出。但是如果不是第一次的话,a[$0]的结果不是1,
取反的话就是0,0++的结果就还是0,所以就不会进行输出。
这里的去除重复行 并不是真正的删除重复行而是 利用unix shell 管道 对重复行的不进行重定向输出
--查看
 last -n 5 |awk '{print $1"\t "$3 "\t " NR "\t" NF}'
 last -n 5 |awk '{print $1"\t "$3 "\t " NR "\t" NF "\t" FS }'
03.grep
    grep -i
    grep -E
     dmesg  | grep --color=auto 'IP'
     ls -F /etc | grep  "/"
     grep 'yt' /etc/passwd

帮助系统--自文档化

文档化  man
       info
    交互式命令行
    可重复命令行

Linux命令行处理数据

    01.做一件事情,并把这件事情做好--各种小工具
    各家所长融为一体--流程的力量
            管道-重定向
    多种方式完成一种任务,随着经验的增加,可以意识到什么时候使用什么工具,
                                以及如何把任务分解,并和当前的工具结合
    02.创建可重用的命令行工具  变为shell脚本 或者参数化
        使用python或者R语言等  泛化 重组
    03.保留所有事情的记录是值得的,因为它不但让你的生活变得简单,而且还会使你开始以
步骤的形式思考数据的工作流,经过一段时间的累计,你可以变得更加高效以及有条理

附录:

cat  concatenate  
cp          复制
scp     安全复制

blogroll

social