如何合并多个文件并在每个文件的>标识前添加文件名
解决方案:给合并的文件标题行添加文件名前缀
这问题挺常见的,单纯用cat确实没法直接给每个文件的标题行加上文件名,得借助文本处理工具来实现。给你两个简单好用的方案:
方案1:用awk一键处理(推荐)
awk可以直接获取当前处理的文件名,用它来批量修改所有>开头的行最方便:
awk '/^>/ {sub(/^>/, ">"FILENAME"_")} 1' FILE* > Unique_file
解释:
/^>/:匹配所有以>开头的行(也就是你的标题行)sub(/^>/, ">"FILENAME"_"):把行首的>替换成>文件名_,FILENAME是awk内置变量,自动获取当前处理的文件名1:awk里1代表逻辑真,会触发默认的打印操作,也就是输出所有行(不管有没有修改)> Unique_file:把处理后的结果直接写入Unique_file(如果文件已存在会覆盖)
方案2:用shell循环+sed处理
如果你更熟悉sed,也可以用循环遍历每个文件,逐个修改后追加到目标文件:
# 先清空已存在的目标文件(可选,避免重复追加) rm -f Unique_file # 遍历所有FILE开头的文件 for file in FILE*; do # 替换当前文件里的>开头行为>文件名_开头,然后追加到Unique_file sed "s/^>/>${file}_/" "$file" >> Unique_file done
解释:
for file in FILE*:遍历所有以FILE开头的文件sed "s/^>/>${file}_/":用sed的替换命令,把行首的>替换成>当前文件名_>> Unique_file:把处理后的内容追加到目标文件末尾
验证效果
处理完后,Unique_file的内容会和你期望的完全一致:
FILE1_content AGGAGAjg GAUGAUGUG AAG
FILE2_Againontent HDHDIHD DHHDDHK DH
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

