Published: 2017-11-24 20:04:00
By ytwan
In Data Mining .
tags: command line
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 安全复制