Skip to content

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