Shell-数据处理.md 8.8 KB

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 打印匹配关键字 只显示匹配到的关键字
以列显示
c 统计匹配到的次数 只显示数字
r 逐层遍历目录查找
C 显示匹配前后多少行
l 只列出匹配的文件名
L 列出不匹配的文件名
e 使用正则表达式
E 使用扩展正则表达式
^key 以关键字开头
key$ 以关键字结尾
^$ 匹配空行

cut

cut用于数据截取

cut 选项 "文件"

选项 功能 备注
c 以字符串为单位进行分割 截取字符串长度由后面数字确定
d 自定义分隔符,默认使用制表符\t 自定义字符使用""
f 与 -d一起使用,指定显示那个区域 多列之间可以加","分隔
连续多列之间家"-"连接
多列之间会携带分隔符

tr

tr用来对标准输入中通过替换或删除操作进行字符转换,主要用于删除文件中控制字符或进行字符转。

使用tr时要转换两个字符串,第一个用于查询,第二个用于处理各种转换。

commands | tr [options] "string1" "string2 < "filename"

选项 功能 备注
d 删除字符串中所有输入字符
s 删除所有重复出现字符序列,只保留第一个。
将重复出现的字符串压缩为一个字符串。

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必须是一个以空格分割的标志
当xargs分析道flag时就停止
-p 没执行一次就询问下用户
-n num 表示执行的时候一次用的参数的个数,默认是全部使用
-t 先打印命令,然后执行,不询问用户是否执行。
-i/-I
-r 当xargs的输入为空的是停止xargs
-d 分隔符,默认的分隔符是回车

数据处理思路

  1. 先截取行
  2. 统一数据格式
  3. 截取字符串
  4. 处理字符串