bash为每个文件创建进程日志

bash为每个文件创建进程日志,bash,Bash,我正在使用bash一个接一个地运行多个进程。我想为每个流程创建一个日志,一个流程启动和完成的日志,但下面只创建并清空log。谢谢:) 因此,当第一个进程(#create BAM Index)运行时,将创建一个日志,记录日志的启动和完成时间 每个进程可能有多个文件,但其中每个文件只需要1log 当第二个过程(#剥离@PG tags)运行时,将创建一个日志,记录其启动和完成的时间。谢谢:) bash # create BAM Index logfile=/home/cmccabe/Desktop/N

我正在使用
bash
一个接一个地运行多个进程。我想为每个流程创建一个日志,一个流程启动和完成的日志,但下面只创建并清空
log
。谢谢:)

因此,当第一个进程(
#create BAM Index
)运行时,将创建一个日志,记录日志的启动和完成时间

每个进程可能有多个文件,但其中每个文件只需要
1
log

当第二个过程(
#剥离@PG tags
)运行时,将创建一个日志,记录其启动和完成的时间。谢谢:)

bash

# create BAM Index
logfile=/home/cmccabe/Desktop/NGS/API/2-12-2015/log.log
for f in /home/cmccabe/Desktop/NGS/API/2-12-2015/*.bam ; do
 bname=`basename $f`
 pref=${bname%%.bam}
 samtools index $f
done > "$logfile"

# strip off @PG tags
logfile=/home/cmccabe/Desktop/NGS/API/2-12-2015/log.log
for f in /home/cmccabe/Desktop/NGS/API/2-12-2015/*.bam ; do
 bname=`basename $f`
 pref=${bname%%.bam}
 samtools view -H $f | sed '/^@PG/d' | samtools reheader - $f > /home/cmccabe/Desktop/NGS/API/2-12-2015/${pref}_newheader.bam
done > "$logfile"

正如我在评论中提到的:

我不建议您在将用于生成所述输出的循环中定义输出日志文件

第二,要从循环中输出数据,我将在循环末尾通过管道传输数据:
done>“$logfile”

我像下面那样运行了您的脚本,但是,它实际上并没有输出任何内容

logfile=log.log

# create BAM Index
for f in *.bam ; do
 bname=`basename $f`
 pref=${bname%%.bam}
 samtools index $f
done > "$logfile"


# strip off @PG tags
for f in *.bam ; do
 bname=`basename $f`
 pref=${bname%%.bam}
 samtools view -H $f | sed '/^@PG/d' | samtools reheader - $f > ${pref}_newheader.bam
done > "$logfile"
如果您想实现这一点,请添加一行,以响应流程的开始和结束,如下所示。还请注意,在第二个循环中,输出通过语法
>
附加到日志中,否则将用
>
覆盖日志

logfile=log.log

# create BAM Index
for f in *.bam ; do
    echo "Start Index creation: $(date) - File: $f"
    bname=$(basename $f)
    pref=${bname%%.bam}
    samtools index $f
    echo "End Index  creation: $(date) - File: $f"
done > "$logfile"


# strip off @PG tags
for f in *.bam ; do
    echo "Start @PG tag strip creation: $(date) - File: $f"
    bname=$(basename $f)
    pref=${bname%%.bam}
    samtools view -H $f | sed '/^@PG/d' | samtools reheader - $f > ${pref}_newheader.bam
    echo "End @PG tag strip creation: $(date) - File: $f"
done >> "$logfile"
日志文件看起来像:

Start Index creation: Sat Feb 20 09:58:46 EST 2016 - File: wgEncodeUwRepliSeqBjG1bAlnRep1.bam
End Index  creation: Sat Feb 20 09:58:47 EST 2016 - File: wgEncodeUwRepliSeqBjG1bAlnRep1.bam
Start @PG tag strip creation: Sat Feb 20 09:58:47 EST 2016 - File: wgEncodeUwRepliSeqBjG1bAlnRep1.bam
End @PG tag strip creation: Sat Feb 20 09:58:47 EST 2016 - File: wgEncodeUwRepliSeqBjG1bAlnRep1.bam

首先,我不建议您在用于生成所述输出的循环中定义输出日志文件。其次,要从循环中输出数据,我将在循环结束时通过管道将数据传输到此处:
done>“$logfile”
。我更新了
bash
,其中包含了您的建议,但创建的日志文件为空,但进程确实运行。谢谢:)。