一、echo 输出显示命令
1. 概念理解
echo 是Linux最基础的标准输出命令,作用是向标准输出(终端屏幕)打印文本字符串、变量值。它是数据流的“产生器”,经常用来生成测试文本、脚本提示信息,同时可以配合重定向完成文件内容的写入。
2. 命令用途
第一,直接在终端展示文字信息;第二,在Shell脚本中输出提示、打印变量;第三,配合重定向创建文件或者向文件写入内容。
3. 主要参数体系
无参数:直接原样输出所有文本内容,结尾自动换行。
-n 参数:取消输出末尾自动添加的换行符,多条echo输出可以拼接在同一行。
-e 参数:开启转义字符解析,系统会识别字符串中的特殊转义符号。常用转义包括换行符、制表符、退格符等。
-E 参数:关闭转义字符解析,把所有符号都当作普通文字原样打印,这是系统默认行为。
二、管道符 |
1. 概念理解
管道是进程间通信的一种方式,符号为 |。管道会捕获前一条命令产生的标准输出数据流,直接把这条数据流作为后一条命令的标准输入。管道只传输标准输出,不会传递标准错误信息。管道中的数据驻留在内存,不会生成任何临时中间文件,命令执行结束后数据流自动销毁。
2. 命令用途
实现命令链式处理,把多个简单命令组合完成复杂文本处理。一条命令负责提取数据,下一条命令负责过滤、修改、统计数据。管道可以无限次串联,形成多级数据流处理流水线。
3. 使用逻辑与注意事项
基础格式:命令1 | 命令2 | 命令3……
数据流流动方向从左向右依次传递。
注意:管道后面只能接收可以读取标准输入的命令;单纯只接收文件参数的命令无法直接使用管道。如果需要把前面的输出当作文件参数,需要搭配xargs使用。
三、重定向命令符
1. 概念理解
Linux程序默认有三条数据流:标准输入(键盘)、标准输出(屏幕)、标准错误(屏幕)。重定向的核心就是修改这三条数据流默认的来源和去向,可以把原本输出到屏幕的数据保存进文件,或者把文件中的内容代替键盘作为程序输入。
重定向分为两大分支:输出重定向、输入重定向。
2. 输出重定向体系
覆盖输出重定向:将标准输出写入目标文件。如果文件已经存在,会直接清空文件内所有原有内容,再写入新数据;如果文件不存在,则自动新建文件。
追加输出重定向:将标准输出写入目标文件。保留文件中原有的全部内容,新内容会添加在整个文件的末尾,不会清空旧数据。
2> 标准错误重定向:专门捕获程序运行时产生的报错信息,只把错误信息写入指定文件,正常输出仍然打印在屏幕。
1> 标准输出重定向,和单独写 > 效果一致,1代表标准输出文件描述符。
&> 混合重定向:同时捕获标准输出和标准错误,将正常信息与报错信息统一写入同一个文件。
3. 输入重定向体系
< 输入重定向:把文件内容作为命令的标准输入,代替键盘手动输入数据。命令不再等待用户在键盘打字,直接读取文件内的数据进行处理。
<< 此处文档(Here Document):可以直接在命令行或者脚本里多行输入文本,不需要读取外部文件,经常用来快速向文件写入多行内容。
四、paste 和 join 文件合并命令
paste 横向文件拼接命令
1. 概念理解
paste是横向按行合并工具,不判断内容,只根据行号进行对齐。读取多个文件,把第1个文件第1行、第2个文件第1行并排输出;第1个文件第2行、第2个文件第2行并排输出,属于纯粹按位置拼接。
2. 用途
快速把多个独立文本文件左右并排合并,制作表格类文本,将分散在不同文件的同一条记录的不同字段横向整合。
3. 主要参数
-d:自定义列与列之间的分隔符号。系统默认使用制表符作为分隔符,可以指定逗号、空格等任意符号。
-s:串行模式,不再横向拼接,而是将一个文件里所有的行首尾相连合并为单独一行。
-:代表从标准输入读取数据,可以结合管道,把管道输出当作一个临时文件参与拼接。
join 关键字关联合并命令
1. 概念理解
join类似数据库中的内连接,不再按照行号简单拼接。它依靠两个文件里完全相同的关键字段匹配记录,只有两个文件同时存在相同关键字的行,才会被合并输出。
2. 重要前提
使用join之前,两个文件必须提前按照用于匹配的关键字进行排序,如果没有排序,会出现匹配缺失、结果错误。
3. 用途
处理具有关联关系的结构化文本数据,比如一张表存姓名年龄,一张表存姓名性别,根据姓名关键字把两条信息整合到同一行。
4. 主要参数
-1:指定第一个文件中,用来作为匹配关键字的列编号。
-2:指定第二个文件中,用来作为匹配关键字的列编号。
-t:自定义文本字段之间的分隔符号,默认以空格、制表符作为分隔。
-a:可以保留没有匹配成功的行,实现左连接、右连接、全连接效果。
paste 和 join 核心区别总结
paste:无逻辑匹配,只根据行号左右横向拼接,不要求文件排序,适用于没有关联关键字,仅仅是行一一对应的文件。
join:基于关键字逻辑匹配,只合并关键字相同的数据,要求文件预先排序,适用于有结构化关联数据的场景。
整体完整知识框架逻辑树
整个Linux文本数据流处理体系遵循一条完整链路:
1. 数据流生成:echo产生文本数据流
2. 数据流传递:管道符将前序命令输出传递给下一条命令连续处理
3. 数据流转向:重定向修改数据流的去向,可以保存到文件或者从文件读取数据
4. 多文件数据流整合:
场景一:文件只是行一一对应,无关联关键字 → 使用paste横向拼接
场景二:文件存在可以匹配的关键字,需要逻辑关联数据 → 使用join关键字匹配合并
所有命令底层都围绕Linux三大基础数据流(标准输入、标准输出、标准错误)进行操作,管道负责内存内临时传递数据流,重定向负责数据流和磁盘文件之间交互,echo是最简单的数据发生器,paste与join针对磁盘上多个文件的数据流做整合处理。
Linux文本数据流处理完整知识框架体系