Linux 如何合并多个文本文件?cat/sed/awk 实用技巧

发布时间 - 2025-12-05 00:00:00    点击率:
Linux合并文本文件首选cat,需去重用awk '!seen[$0]++',去空行加NF,跳过头尾用sed或head/tail,加行号或文件标识用awk的FILENAME/NR变量。

Linux 合并多个文本文件最直接的方法是用 cat,但实际场景中常需去重、去空行、加序号、跳过头部/尾部、按条件筛选——这时 sedawk 就派上用场了。下面整理几类高频需求的实用写法,不讲原理,只给能立刻跑通的命令。

基础合并:cat 最常用也最可靠

把 file1.txt、file2.txt、file3.txt 顺序拼成 all.txt:

cat file1.txt file2.txt file3.txt > all.txt

合并当前目录下所有 .log 文件(按字母序):

cat *.log > merged.log

注意:通配符展开顺序依赖文件名排序,如需指定顺序,显式列出或用 find + sort 控制。

合并时去重且保持顺序:awk '!seen[$0]++'

多个文件内容有重复行,想合并后每行只保留首次出现的一次(原顺序不变):

awk '!seen[$0]++' file1.txt file2.txt file3.txt > unique.txt

  • 这个写法比 sort -u 更轻量,不改变原始行序
  • 若要去除空白行再合并去重:awk 'NF && !seen[$0]++' *.txt
  • 区分大小写;如需忽略大小写,改用 awk 'NF && !seen[tolower($0)]++'

合并时跳过每文件的前 N 行或末 N 行

比如每个日志文件开头都有 3 行头信息,不想合并进去:

sed '1,3d' file1.txt file2.txt | awk 'NF' > clean.log

如果要跳过每个文件的最后 2 行(适合去掉 footer):

for f in *.txt; do head -n -2 "$f"; done | awk 'NF' > no_footer.log

  • head -n -2 表示除最后两行外全部输出
  • awk 'NF' 过滤掉空行,比 grep '.' 更稳妥(能处理纯空格行)
  • 避免用 tail -n +4 直接处理多文件,它对每个文件独立计数但 cat 后会混在一起

合并并添加行号/文件标识:awk 实现灵活标记

想看出某行来自哪个文件,或加全局序号便于追踪:

awk '{print FILENAME ":" NR ": " $0}' file1.txt file2.txt > labeled.txt

只在每文件开头加个分隔线:

awk 'FNR==1{print "\n=== " FILENAME " ==="} {print}' *.conf > full.conf

  • FILENAME 是当前文件名,FNR 是当前文件内行号,NR 是总行号
  • 想加全局连续行号:awk '{print NR ": " $0}' *.txt
  • 合并时统一补前缀(如日志时间戳):awk '{print "[2025-06-15] " $0}' *.log

基本上就这些。cat 负责“搬”,sed 负责“剪裁”,awk 负责“标记+逻辑”。不用死记,遇到具体需求,先想清楚要删什么、留什么、标什么,再挑对应工具组合就行。


# linux  # 工具  # ai  # print  # sort  # for  # 行号  # 跳过  # 多个  # 如需  # 文本文件  # 都有  # 首次  # 就行  # 想看  # 只在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解jQuery中的事件  iOS UIView常见属性方法小结  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  微信小程序制作网站有哪些,微信小程序需要做网站吗?  JavaScript Ajax实现异步通信  如何基于云服务器快速搭建个人网站?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  如何用好域名打造高点击率的自主建站?  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何快速搭建高效WAP手机网站吸引移动用户?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何在阿里云虚拟主机上快速搭建个人网站?  java ZXing生成二维码及条码实例分享  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何实现建站之星域名转发设置?  如何在阿里云香港服务器快速搭建网站?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  如何在企业微信快速生成手机电脑官网?  独立制作一个网站多少钱,建立网站需要花多少钱?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  EditPlus中的正则表达式实战(6)  大学网站设计制作软件有哪些,如何将网站制作成自己app?  详解Android——蓝牙技术 带你实现终端间数据传输  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Python结构化数据采集_字段抽取解析【教程】  如何在Windows环境下新建FTP站点并设置权限?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  如何在搬瓦工VPS快速搭建网站?  Laravel如何配置和使用缓存?(Redis代码示例)  如何用wdcp快速搭建高效网站?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在万网开始建站?分步指南解析