希望有人能帮我!
我有一个文件input.list
/scratch/user/IFS/IFS001/IFS003.GATK.recal.bam
/scratch/user/IFS/IFS002/IFS002.GATK.recal.bam
/scratch/user/EGS/ZFXHG22/ZFXHG22.GATK.recal.bam我想在.GATK.recal.bam之前提取这个位--我找到了一个解决方案:
sed 's/\.GATK\.recal\.bam.*//' input.list | sed 's@.*/@@' 我现在想把它合并到want循环中,但是它不起作用.请有人看一看我做错了什么。我的尝试如下:
while read -r line; do ID=${sed 's/\.GATK\.recal\.bam.*//' $line | sed 's@.*/@@'}; sbatch script.sh $ID; done < input.list为轻松的Q道歉..。
发布于 2021-07-22 22:41:00
您可以直接使用bash (如果您正在使用该shell;ksh93和zsh非常相似)可以这样做,不需要sed:
while read -r line; do
id="${line##*/}" # Remove everything up to the last / in the string
id="${id%.GATK.recal.bam}" # Remove the trailing suffix
sbatch script.sh "$id"
done < input.list至少,您可以在每行使用一个sed调用:
id=$(sed -e 's/\.GATK\.recal\.bam$//' -e 's@.*/@@' <<<"$line")或者使用普通的sh
id=$(printf "%s\n" "$line" | sed -e 's/\.GATK\.recal\.bam$//' -e 's@.*/@@')发布于 2021-07-22 22:51:14
您可以使用sed命令的输出作为循环的输入:
sed 'COMMAND' input.file | while read -r id ; do
some_command "${id}"
done也可以使用xargs来代替循环:
sed 'COMMAND' input.file | xargs -n1 some_commandps: GNU支持以命令的形式执行s操作的结果。出于可移植性的原因,我不建议在生产中使用这种方法,但值得提及的是:
sed 's/\(.*\)\.GATK\.recal\.bam.*/sbatch script.sh \1/e' input.filehttps://stackoverflow.com/questions/68491742
复制相似问题