【问题标题】:Using basename and absolute path inside a for loop at the same time在 for 循环中同时使用基本名称和绝对路径
【发布时间】:2021-06-29 17:24:27
【问题描述】:

假设我有

for i in `ls -1 /home/samples/*_1.fq.gz | sed 's/_1.fq.gz//'`
do
bbduk.sh -Xmx1g in1=$i\_1.fq.gz in2=$i\_2.fq.gz out1=/home/output/BASENAME\_clean_1.fq.gz out2=/home/output/BASENAME\_clean_2.fq.gz ref=/home/bbduk/bbmap/resources/adapters.fa ktrim=r k=23 mink=11 hdist=1 tpe tbo qtrim=r trimq=10 maq=10 
done

我正在尝试这样做,输入(in1 和 in2)是绝对路径,它对当前代码执行此操作,但输出(out1 和 out2)必须是 i 的基本名称

这是因为我需要程序将“basename_clean_1.fq.gz”和“basename_clean_2.fq.gz”输出到与文件来源不同的目录

有什么想法吗?

【问题讨论】:

    标签: linux for-loop absolute-path basename


    【解决方案1】:

    使用参数扩展来操作名称。 ${i%_1.fq.gz} 将删除 $i 的后缀,${i##*/} 为您提供基本名称。例如:

    for i in /home/samples/*_1.fq.gz; do   
        s="${i%_1.fq.gz}"
        echo basename: "${s##*/}"
        echo fullpath: "$s"
    done
    

    【讨论】:

      猜你喜欢
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2018-01-22
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多