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

如何用Bash或Awk提取文件表头每列的第三个分隔值(文件名)

提取表头行中文件路径的文件名

问题场景

有一个文件,其表头行的每列都是类似AAF2Y7VM5-8/cnv/F04_reads.tsv的文件路径,需要提取每列的文件名并输出,文件列数超过100列。

示例输入表头行:

AAF2Y7VM5-8/cnv/F04_reads.tsv AAF2Y7VM5-7/cnv/D04_reads.tsv AAF2Y7VM5-6/cnv/E04_reads.tsv

目标输出表头行:

F04_reads.tsv D04_reads.tsv E04_reads.tsv

以下是几种可行的解决方案:


Awk 方案

方案1:分割字段提取目标部分

NR==1 {
    for(i=1;i<=NF;i++) {
        split($i, path_parts, "/")
        printf "%s ", path_parts[3]
    }
    print ""
} ZScores.txt

仅处理第一行,遍历每个字段,用/分割路径为数组后取第三个元素(文件名),最后补充换行保证格式正确。

方案2:正则替换简化操作

NR==1 {gsub(/[^[:space:]]+\//, "", $0); print} ZScores.txt

直接将第一行中所有非空格字符+斜杠的前缀替换为空,剩下的就是所有文件名。


Sed 方案

-n控制仅输出指定行;对第一行执行全局替换,移除每个路径的前缀部分,最后打印处理后的内容。


Bash 组合命令方案

head -n1 ZScores.txt | tr '\t' '\n' | awk -F/ '{print $3}' | tr '\n' ' ' && echo

步骤分解:

  1. 用head取出第一行
  2. 把制表符转为换行,让每个路径单独一行
  3. 用awk分割每行路径取第三个字段
  4. 再把换行转回空格,最后用echo补换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:18:27