Date Wrangling(数据整理)
1. Introduction(介绍)
所谓的数据整理,就是假如有一种数据,你想将它转换成另一种格式的数据
这种事情非常常见
正则表达式
正则表达式是一种用来匹配字符串的模式
在数据整理中,正则表达式可以用来提取、替换、删除、或者验证日期字符串
如何使用正则表达式
- 首先,你需要了解正则表达式的语法
- 然后,你需要了解一些常用的正则表达式模式
- 最后,你需要熟练掌握一些正则表达式的操作符
元字符
字符 | 说明 | 示例 |
---|---|---|
. | 匹配任意单个字符 | a.c → abc |
\d | 数字字符(等价[0-9]) | \d\d → 42 |
\w | 单词字符(字母/数字/_) | \w\w → A1 |
\s | 空白字符(空格/tab/换行) | a\sb → a b |
\D | 非数字字符 | \D → a |
\W | 非单词字符 | \W → @ |
\S | 非空白字符 | \S → X |
字符组
regex
[aeiou] 匹配任意元音字母
[a-zA-Z] 匹配任意大小写字母
[^0-9] 匹配非数字字符
量词
regex
? 0或1次(可有可无)
+ 1次或多次
* 0次或多次
{n} 精确n次
{n,} 至少n次
{n,m} n到m次
锚点
regex
^ 行首
$ 行尾
\b 单词边界
\B 非单词边界
分组与捕获
regex
(ab)+ 匹配连续出现的ab
(?:abc) 非捕获分组
(a|b) 匹配a或b
反向引用
regex
(\d)\1 匹配重复数字(如11、22)
sed 命令
sed 命令是一种流编辑器,它可以对文本进行替换、删除、搜索和替换等操作
sed 命令语法
bash
sed [选项] '命令' 文件名
常用选项
-n
:静默模式,只打印匹配到的行,不打印未匹配到的行-e
:添加命令-f
:添加命令文件-i
:直接修改文件内容
常用命令
s/old/new/g
:替换命令,将 old 替换为 new,g 表示全局替换d
:删除命令,删除匹配到的行p
:打印命令,打印匹配到的行w
:写入命令,将匹配到的行写入文件q
:退出命令,退出 sed 编辑器
示例
bash
# 打印所有行
sed -n 'p' file.txt
# 打印包含hello的行
sed -n '/hello/p' file.txt
# 替换所有hello为hi
sed -i's/hello/hi/g' file.txt
# 删除所有空行
sed -i '/^$/d' file.txt
# 打印所有行,并将匹配到的行写入文件
sed -n 'p' file.txt > result.txt
sed 配合正则表达式使用效果更佳哦
sort 指令
sort 指令可以对文本进行排序
sort 指令语法
bash
sort [选项] 文件名
常用选项
-n
:按数字排序-r
:反向排序-u
:删除重复行-t
:指定分隔符
示例
bash
# 按数字排序
sort -n file.txt
# 反向排序
sort -nr file.txt
# 删除重复行
sort -u file.txt
# 指定分隔符
sort -t, -n file.txt
awk 命令
awk 可介绍的太多了,这里只介绍一些常用的用法
awk 命令语法
bash
awk [选项] '命令' 文件名
常用选项
-F
:指定分隔符-v
:定义变量
常用命令
print
:打印命令,打印指定字段length
:计算字段长度toupper
:转换为大写tolower
:转换为小写match
:匹配模式split
:分割字符串sub
:替换命令
示例
bash
# 打印所有行
awk '{print}' file.txt
# 打印指定字段
awk -F: '{print $1}' file.txt
# 计算字段长度
awk -F: '{print length($1)}' file.txt
# 转换为大写
awk '{print toupper($0)}' file.txt
# 转换为小写
awk '{print tolower($0)}' file.txt
# 匹配模式
awk -F: '/hello/{print $1}' file.txt
# 分割字符串
awk -F: '{split($0,a," "); print a[1]}' file.txt
# 替换命令
awk -F: '{sub(/hello/,"hi"); print $0}' file.txt
分析数据
想做数学计算也是可以的!例如这样,您可以将每行的数字加起来:
bash
| paste -sd+ | bc -l