Linux合并文本文件首选cat,需去重用awk '!seen[$0]++',去空行加NF,跳过头尾用sed或head/tail,加行号或文件标识用awk的FILENAME/NR变量。

Linux 合并多个文本文件最直接的方法是用 cat,但实际场景中常需去重、去空行、加序号、跳过头部/尾部、按条件筛选——这时 sed 和 awk 就派上用场了。下面整理几类高频需求的实用写法,不讲原理,只给能立刻跑通的命令。
把 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]++' file1.txt file2.txt file3.txt > unique.txt
比如每个日志文件开头都有 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
想看出某行来自哪个文件,或加全局序号便于追踪:
awk '{print FILENAME ":" NR ": " $0}' file1.txt file2.txt > labeled.txt
只在每文件开头加个分隔线:
awk 'FNR==1{print "\n=== " FILENAME " ==="} {print}' *.conf > full.conf
基本上就这些。cat 负责“搬”,sed 负责“剪裁”,awk 负责“标记+逻辑”。不用死记,遇到具体需求,先想清楚要删什么、留什么、标什么,再挑对应工具组合就行。
以上就是Linux 如何合并多个文本文件?cat/sed/awk 实用技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号