如何通过循环批量合并前缀相同的文本文件
如何通过循环批量合并前缀相同的文本文件
这个需求太接地气了,手动挨个用cat合并肯定要疯,用shell循环就能一次性搞定,我给你两种实用的方案:
方案一:简单直接的基础循环
这是最适合你当前场景的方法,假设所有目标文件都在当前目录下:
# 遍历所有唯一的前缀,批量合并文件 for prefix in $(ls *.24o | cut -c1-4 | sort -u); do cat "${prefix}"*.24o > "${prefix}_combined" done
我给你拆解下每部分的作用:
ls *.24o:列出当前目录下所有后缀为.24o的文件cut -c1-4:截取每个文件名的前4个字符(也就是你说的相同前缀)sort -u:对前缀排序并去重,避免重复处理同一个前缀- 循环里的
"${prefix}"*.24o:精准匹配所有以当前前缀开头的.24o文件 > "${prefix}_combined":把合并后的内容写入到前缀_combined的文件里,比如ajac_combined
方案二:更健壮的版本(处理特殊文件名)
如果你的文件名里可能包含空格、换行或者其他特殊字符,上面的方法可能会出问题,这时候可以用更安全的写法:
# 用find+read处理特殊文件名的场景 find . -maxdepth 1 -type f -name "*.24o" | sed 's/^\.\/\(....\).*/\1/' | sort -u | while read -r prefix; do cat "${prefix}"*.24o > "${prefix}_combined" done
这个版本用find命令来获取文件列表,再通过sed提取前缀,最后用while read来遍历,能避免特殊字符导致的错误。
两种方法都能帮你自动完成所有前缀文件的合并,不用再手动敲无数个cat命令啦!
备注:内容来源于stack exchange,提问作者deepblue_86
相关产品推荐
相关产品推荐

