【数据工程】 2. Unix 基础与文件操作
在命令行上处理数据:Unix 基础与文件操作
在现代数据工程与数据分析中,掌握命令行操作是一项基础且高效的技能。无论是快速处理文本数据、自动化数据管道,还是管理文件系统,Unix 系统提供了强大的命令行工具,让数据工作更加灵活、高效。本文将从 Unix 历史、基本使用原则,到常用文件操作命令和高级文本处理技巧,系统介绍如何在命令行上处理数据。
Unix 简史
Unix 是一种历史悠久的操作系统,其发展奠定了现代数据处理与系统管理的基础:
-
起源:1970 年代在贝尔实验室(Bell Labs)开发
-
商业化:AT&T 将 Unix 授权给外部合作伙伴,引发多种商业化尝试,包括:
- Sun Solaris、IBM AIX、Microsoft Xenix、HP-UX
- Berkeley BSD Unix
-
Linux:1991 年,Linus Torvalds 开始独立开发 Linux,成为 Unix-like 系统
- Free Software Foundation 称其为 GNU/Linux
-
macOS:基于 Mach 内核,并添加 BSD Unix 的工具与层
Unix 系统的发展历史展示了其灵活性与可扩展性,也为现代数据工程的命令行工具打下了基础。
使用 Unix 时需注意的事项
Unix 的命令行接口非常强大,但也要求用户保持谨慎与精准:
-
命令行工具区分大小写
-
操作以键盘为中心,每个字符都很重要,例如:
- 使用
ls
列出目录,而不是 “list” 或 “dir” - 使用
chmod
修改权限,而不是 “change_mode”
- 使用
-
Unix 很少在执行前询问确认,因此修改或删除操作需格外小心
-
帮助资源丰富:
man <command>
查看命令手册页- 许多命令支持
-h
或--help
选项
文件系统导航命令
在 Unix 系统中,掌握目录与文件操作是第一步。常用命令包括:
命令 | 功能 |
---|---|
pwd | 显示当前工作目录 |
cd <name> | 切换到指定目录 |
cd | 返回用户主目录 |
cd - | 返回上一次目录 |
cd / | 切换到根目录 |
ls [<name>] | 列出目录内容 |
ls -al | 列出所有内容及详细信息 |
ls -R | 递归列出目录及子目录 |
mkdir <name> | 创建新目录 |
mv <old> <new> | 重命名或移动文件/目录 |
cp <source> <destination> | 复制文件或目录 |
查看文件内容
常用命令查看文件内容或文件信息:
命令 | 功能 |
---|---|
cat filename | 将文件内容输出到屏幕 |
more filename / less filename | 分页显示文件内容 |
head filename | 输出文件前 N 行(默认 10 行) |
tail filename | 输出文件后 N 行(默认 10 行) |
wc filename | 统计文件行数、单词数、字符数 |
sort filename | 对文件内容排序 |
输出重定向(Output Redirection)
Unix 命令默认将输出显示在屏幕上(stdout),但可以重定向到文件:
- 标准输出重定向:
command > filename
- 错误输出重定向:
command 2> filename
这样可以保存命令输出,方便后续分析或日志记录。
管道(Piping):组合 Unix 工具
在 Unix 中,一切皆为文件,命令输出可直接作为下一个命令的输入:
- 使用
|
管道符连接命令 - 示例:
cat filename | sort | head -3
这条命令会:
cat filename
输出文件内容sort
对内容排序head -3
输出前三行
- 实用案例:拼写检查
cat textfile |
tr 'A-Z' 'a-z' | # 转小写
tr -cs 'A-Za-z' '\n'| # 每行一个单词,去掉非字母字符
sort | # 排序
uniq | # 去重
comm -23 - /usr/share/dict/words # 显示不在词典中的单词
在文件中查找数据:grep 与 egrep
grep
命令用于模式匹配搜索:
grep pattern filename
- 查找文件中匹配的行
- 默认区分大小写
egrep
支持扩展正则表达式
正则表达式(Regular Expressions)
正则表达式是定义搜索模式的字符序列,支持复杂匹配:
- 通配符:
.
匹配任意单个字符 - 可选
?
:0 或 1 次 - 星号
*
:0 或多次 - 加号
+
:1 或多次 - 重复次数
{n}
- 字符集合
[ae]
、否定[^bc]
- 行首
^
、行尾$
- 分组
\([A-Z]+\)
正则表达式可与 grep
, sed
, awk
等命令结合,实现强大搜索与文本处理功能。
流编辑器:sed
sed
是 Unix 的流编辑器,常用于自动文本替换:
sed -e 's/from/to/g' filename
s
表示替换from
为匹配字符串to
为替换字符串g
表示行内全部替换
示例:
echo "hello world" | sed -e 's/hello/bonjour/g' > output.txt
文本处理语言:awk
AWK
是用于文本处理和数据提取的编程语言:
- 起源:1970 年代贝尔实验室(Alfred Aho, Peter Weinberger, Brian Kernighan)
- 功能:对每行输入执行模式 { 动作 },可处理字段
$0, $1, …, $NF
- 可指定字段分隔符
- 支持特殊模式
BEGIN
和END
,分别在文件开始或结束时执行动作
示例:提取 CSV 文件第二列:
awk -F ',' '{print $2}' file.csv
小结
掌握 Unix 命令行,不仅可以高效导航文件系统,还能完成数据浏览、过滤、排序、搜索和复杂文本处理。
- 输出重定向让数据保存更灵活
- 管道连接多个命令,实现无临时文件的数据流
grep
、正则表达式、sed
与awk
提供强大文本处理能力
通过这些工具,数据工程师和分析师可以在命令行上快速处理大规模文本数据,为自动化数据管道和数据分析打下坚实基础。