You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下生成文件名-路径两列tab分隔文件的脚本修正求助

实现方案

你原有脚本未做路径剥离处理,导致第一列携带完整路径,以下提供两种可直接运行的实现方式,输出完全符合「第一列为不带路径、不带.fasta后缀的纯文件名,第二列为文件完整绝对路径,制表符分隔」的要求。

方案1:find+awk 实现(兼容性最好)

该方案对包含空格、特殊字符的文件名兼容性更强,默认不递归扫描子目录,如需递归可删除-maxdepth 1参数:

# 将命令中 /your/target/dir 替换为你要扫描的实际目录绝对路径
find /your/target/dir -maxdepth 1 -type f -name "*.fasta" | sort | awk -F '/' '{
    full_path = $0
    pure_name = $NF
    sub(/\.fasta$/, "", pure_name)
    print pure_name "\t" full_path
}' > out.txt

参数说明:

  • -maxdepth 1:限制仅扫描指定目录的首层文件,不进入下级子目录
  • -type f:仅匹配普通文件,排除目录、软链接等特殊类型
  • sub(/\.fasta$/, "", pure_name):移除第一列文件名末尾的.fasta后缀,匹配示例格式要求

方案2:基于原有脚本修改(改动量最小)

保留你原脚本的写法逻辑,仅补充文件名提取步骤即可:

# 将 TARGET_PATH 的值替换为你要扫描的实际目录路径
TARGET_PATH="PATH"
paste -d '\t' \
    <(printf "%s\n" "$TARGET_PATH"/*.fasta | xargs -n1 basename | sed 's/\.fasta$//' | sort) \
    <(printf "%s\n" "$TARGET_PATH"/*.fasta | sort) \
> out.txt

改动说明:

  • 新增xargs -n1 basename流程,从全路径中提取纯文件名
  • 新增sed逻辑移除第一列的.fasta后缀
  • 第二列直接保留排序后的完整路径,无需重复拼接字符串

输出效果参考

若指定目录下存在test1.fasta、test2.fasta两个文件,最终生成的out.txt内容格式如下(两列以制表符分隔):

test1	/your/target/dir/test1.fasta
test2	/your/target/dir/test2.fasta

内容的提问来源于stack exchange,提问作者Ana Paulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:45:31