Você está tornando as coisas mais difíceis do que precisam e enfrentando problemas de espaço em branco e de citação. Tente algo como o seguinte:
Etapa 1: crie um script autônomo que faça o que você quiser com um ou mais arquivos de dados, dados os argumentos e nome (s) de arquivo apropriados na linha de comando. p>
#!/bin/sh
# use the first 3 arguments for the values to pass to DASqv
db="$1"
H="$2"
cov="$3"
# use shift to get rid of them once we have them in variables, ...
shift 3
# ... so we can loop over the remaining filenames (1 or more) on the command line
for filename in "$@" ; do
outfile="$(basename "$filename" .las).DAStrim"
qsub <<EOF
#!/bin/bash -l
#PBS -N DASqv
#PBS -l walltime=48:00:00
#PBS -j oe
#PBS -l mem=30G
#PBS -l ncpus=1
#PBS -M [email protected]
##PBS -m bea
cd "\$PBS_O_WORKDIR"
source activate thegenemyers
DASqv -v -H"$H" -c"$cov" "$db" "$filename" |
sed -n -e '/Recommend/ {
s/Recommend //;
s/\x27//g;
s:$: "$db" "$filename":;
p
}' > "$outfile"
EOF
done
(o script sed
no meio disso pode estar todo em uma linha, mas as alimentações de linha extras eo recuo o tornam mais legível sem alterar o que ele faz / como ele é executado de qualquer forma. Além disso, observe o uso de \x27
para remover todos os caracteres de aspas simples. 0x27
é a notação hexadecimal para o caractere de aspas simples ASCII)
salve como, por exemplo, submit-jobs.sh
e torne-o executável com chmod +x submit-job.sh
.
Etapa 2: Teste-a
Teste se o script faz o que você deseja usando manualmente para enviar trabalhos. por exemplo. executar:
/path/to/submit-jobs.sh bananaDB 6973 38 /path/to/somefile.las
Modifique o script, se necessário, até que ele faça exatamente o que você deseja.
Etapa 3: use agora find
para enviar vários trabalhos usando o script:
find . -type f -name '*.las' -exec /path/to/submit-jobs.sh bananaDB 6973 38 {} +
Etapa 4: (opcional) transforme a etapa 3 em um script que possa ser executado com diferentes argumentos para evitar que você tenha que digitar o comando find ...
sempre que desejar outra execução com um pouco diferente valores. por exemplo,
#!/bin/sh
find . -type f -name '*.las' -exec /path/to/submit-jobs.sh "$1" "$2" "$3"
Se você salvou isso como find-and-submit.sh
e tornou executável com chmod +x
, você o executaria como:
find-and-submit.sh bananaDB 6973 38
Esse script da etapa 4 pode até ter um loop para as variáveis, de modo que, por exemplo, ele enviou jobs para $cov
de 35 a 45, em vez de exigir que $cov
seja um dos argumentos.