|
@@ -0,0 +1,171 @@
|
|
|
+# Shell 数据处理
|
|
|
+
|
|
|
+## Linux中的常用符号
|
|
|
+
|
|
|
+| 符号 | 功能 |
|
|
|
+| ---------- | ------------------------------------------------------ |
|
|
|
+| * | 代表任意**字符串** |
|
|
|
+| ? | 代表任意**字符** |
|
|
|
+| / | 代表根目录或作为路径间隔符使用 |
|
|
|
+| \ \<ENTER> | 续行符,可以使用续行符将一个命令行分写在多行上 |
|
|
|
+| $ | 变量标识符,用来读取变量 |
|
|
|
+| ' | 在'……'中间的字符会被当做字符串处理 |
|
|
|
+| " | 在"……"中间的字符会被当做字符串处理,**允许读取变量** |
|
|
|
+| ` | 在\`……\`中的命令会被执行 |
|
|
|
+| < | 输入重定向字符 |
|
|
|
+| > | 输出重定向字符 |
|
|
|
+| \| | 管道字符 |
|
|
|
+| & | 后台执行字符,一般放在命令最后面。 |
|
|
|
+| ; | 命令分隔字符,按照顺序执行多个命令 |
|
|
|
+| () | 在子Shell中执行命令(执行完毕自动结束,不影响当前Shell) |
|
|
|
+| {} | 在当前Shell中执行命令 |
|
|
|
+| ! | 执行历史记录中的命令 |
|
|
|
+| ~ | 当前用户的主目录(家目录) |
|
|
|
+
|
|
|
+## 输入输出重定向
|
|
|
+
|
|
|
+| 语法 | 作用 |
|
|
|
+| --------------- | ------------------------------------------------------------ |
|
|
|
+| cmd < file | 从file重定向标准输出 |
|
|
|
+| cmd > file | 把标准输出重定向到file中,如果file存在则**覆盖file** |
|
|
|
+| cmd >> file | 把标准输出重定向到file中,如果file存在则**追加到后面** |
|
|
|
+| cmd 2> file | 把标准错误重定向到file中,如果file存在则覆盖file |
|
|
|
+| cmd 2>> file | 把标准错误重定向到file中,如果file存在则追加到后面 |
|
|
|
+| cmd > file 2>&1 | 合并标准输出和标准错误,并重定向到file中,可以简写为`cmd >& file` |
|
|
|
+
|
|
|
+### 管道
|
|
|
+
|
|
|
+### 数据处理常用工具
|
|
|
+
|
|
|
+#### grep
|
|
|
+
|
|
|
+grep负责从数据源中检索对应的字符串,进行过滤,输匹配的行。
|
|
|
+
|
|
|
+### grep
|
|
|
+
|
|
|
+grep负责从数据源中检索对应的字符串,**行**过滤。输出的时被匹配的那行。
|
|
|
+
|
|
|
+`grep [options] "string" firename`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | --------------------------------- | ---------------------------------- |
|
|
|
+| i | 不区分大小写,linux默认区分大小写 | |
|
|
|
+| v | 反向查找,查找不包含 | |
|
|
|
+| w | 按单词搜索 | 必须是正确的单词 |
|
|
|
+| n | 显示行号 | |
|
|
|
+| A | 显示匹配行以及后面多少行 -A 5 | |
|
|
|
+| B | 显示匹配行以及后面多少行 | |
|
|
|
+| o | 打印匹配关键字 | 只显示匹配到的关键字<br />以列显示 |
|
|
|
+| c | 统计匹配到的次数 | 只显示数字 |
|
|
|
+| r | 逐层遍历目录查找 | |
|
|
|
+| C | 显示匹配前后多少行 | |
|
|
|
+| l | 只列出匹配的文件名 | |
|
|
|
+| L | 列出不匹配的文件名 | |
|
|
|
+| e | 使用正则表达式 | |
|
|
|
+| E | 使用扩展正则表达式 | |
|
|
|
+| ^key | 以关键字开头 | |
|
|
|
+| key$ | 以关键字结尾 | |
|
|
|
+| ^$ | 匹配空行 | |
|
|
|
+
|
|
|
+#### cut
|
|
|
+
|
|
|
+cut用于数据截取
|
|
|
+
|
|
|
+`cut 选项 "文件"`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | ------------------------------- | ------------------------------------------------------------ |
|
|
|
+| c | 以字符串为单位进行分割 | 截取字符串长度由后面数字确定 |
|
|
|
+| d | 自定义分隔符,默认使用制表符\t | 自定义字符使用"" |
|
|
|
+| f | 与 -d一起使用,指定显示那个区域 | 多列之间可以加","分隔<br />连续多列之间家"-"连接<br />多列之间会携带分隔符 |
|
|
|
+
|
|
|
+#### tr
|
|
|
+
|
|
|
+tr用来对标准输入中通过替换或删除操作进行字符转换,主要用于删除文件中控制字符或进行字符转。
|
|
|
+
|
|
|
+使用tr时要转换两个字符串,第一个用于查询,第二个用于处理各种转换。
|
|
|
+
|
|
|
+`commands | tr [options] "string1" "string2 < "filename"`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | ------------------------------------------------------------ | ---- |
|
|
|
+| d | 删除字符串中所有输入字符 | |
|
|
|
+| s | 删除所有重复出现字符序列,只保留第一个。<br />将重复出现的字符串压缩为一个字符串。 | |
|
|
|
+
|
|
|
+#### sort
|
|
|
+
|
|
|
+sort是将文件的**每一行作为一个单位**,从**首字符向后**,一次按照ASCII码进行比较,最后将他们**升序**输出。
|
|
|
+
|
|
|
+`sort [options] [filename]`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | -------------------------- | ------------ |
|
|
|
+| u | 去除重复行 | 只保留第一行 |
|
|
|
+| r | 降序排列 | |
|
|
|
+| o | 将排序结果输出到文件中 | |
|
|
|
+| n | 以数字排序,默认是字符排序 | |
|
|
|
+| t | 分隔符 | |
|
|
|
+| k | 第N列 | |
|
|
|
+| b | 忽略前导空格 | |
|
|
|
+| R | 随机排序,每次结果都不同 | |
|
|
|
+
|
|
|
+#### uniq
|
|
|
+
|
|
|
+### uniq
|
|
|
+
|
|
|
+uniq能够去除连续的重复行。**去重前先要排序**
|
|
|
+
|
|
|
+`uniq [options] [filename]`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | -------------- | ---- |
|
|
|
+| i | 忽略大小写 | |
|
|
|
+| c | 统计重复行次数 | |
|
|
|
+| d | 只显示重复行 | |
|
|
|
+
|
|
|
+#### tee
|
|
|
+
|
|
|
+tee能够实现双向输出,将屏幕输出文件写入到文件或输出到屏幕。和"<<" ">>" "<" ">" 这几个工具一样。
|
|
|
+
|
|
|
+`somecommand | tee`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | -------------- | ---- |
|
|
|
+| a | 双向追加重定向 | |
|
|
|
+
|
|
|
+#### paste
|
|
|
+
|
|
|
+paste工具用于合并文件行输出到屏幕,不会改动源文件。
|
|
|
+
|
|
|
+`paste [options] [file1] [file2] ...`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ---- | --------------------------------------- | ---- |
|
|
|
+| d | 自定义间隔符 | |
|
|
|
+| s | 将每个文件按照一行输出,航宇航以tab间隔 | |
|
|
|
+
|
|
|
+#### xargs
|
|
|
+
|
|
|
+管道命令,将上一个命令的输出作为下一个命令的输入,做的是**数据源**,一般使用"|"符号。
|
|
|
+
|
|
|
+xargs命令,将上一个命令的输出作为下一个命令的**参数**。一般是和管道命令一起使用。
|
|
|
+
|
|
|
+`"[somecommand]|[filename]" | xargs [options] command`
|
|
|
+
|
|
|
+| 选项 | 功能 | 备注 |
|
|
|
+| ------- | ------------------------------------------------------------ | ---- |
|
|
|
+| -a file | 从文件读入作为输入 | |
|
|
|
+| -E flag | flag必须是一个以空格分割的标志<br />当xargs分析道flag时就停止 | |
|
|
|
+| -p | 没执行一次就询问下用户 | |
|
|
|
+| -n num | 表示执行的时候一次用的参数的个数,默认是全部使用 | |
|
|
|
+| -t | 先打印命令,然后执行,不询问用户是否执行。 | |
|
|
|
+| -i/-I | | |
|
|
|
+| -r | 当xargs的输入为空的是停止xargs | |
|
|
|
+| -d | 分隔符,默认的分隔符是回车 | |
|
|
|
+
|
|
|
+## 数据处理思路
|
|
|
+
|
|
|
+1. 先截取行
|
|
|
+2. 统一数据格式
|
|
|
+3. 截取字符串
|
|
|
+4. 处理字符串
|