2

我有一个 bash 脚本,其中有几个 qsub。他们每个人都在等待之前的 qsub 在开始之前完成。

我的第一个 qsub 包括将某个目录中的文件发送到 perl 程序,并将输出文件打印在新目录中。最后,我用我所有的工作名称回显数组。该脚本按预期工作。

mkdir -p /perl_files_dir
for ID_FILES in `ls Infiles_dir/*.txt`;
do
JOB_ID=`echo "perl perl_scirpt.pl $ID_FILES" | qsub -j oe `
JOB_ID_ARRAY="${JOB_ID_ARRAY}:$JOB_ID" 
done
echo $JOB_ID_ARRAY

我的第二个 qsub 旨在将我以前用我的 perl 脚本制作的所有文件排序到一个新的 outfile 中,并在所有这些工作完成(大约 100 个工作)后开始使用depend=afterany. 同样,这部分工作正常。

SORT_JOB=`echo "sort -m -n perl_files_dir/*.txt  >>sorted_file.txt" | qsub -j oe -W depend=afterany$JOB_ID_ARRAY`
SORT_ARRAY="${SORT_ARRAY}:$SORT_JOB"

我的问题是,在我的排序文件中,我有几列我想删除(2 到 6),所以我想出了最后一行,使用awkpiped tosed和另一个depend=afterany

SED=`echo "awk '{\$2="";\$3="";\$4="";\$5="";\$6=""; print \$0}' sorted_file.txt \
| sed 's/     //g' >final_file.txt" | qsub -j oe -W depend=afterany$SORT_ARRAY`

最后一步创建final_file.txt,但将其留空。我SED=在 echo 之前添加了,否则它会给我Command not found.

我尝试不使用管道,所以它只会打印所有内容。不幸的是,它什么也没打印。我认为它没有打开我的排序文件,这就是为什么我的最终文件在我的 sed 之后是空的。如果是这样,那为什么 awk 不读取呢?

在我的脚本中,我使用变量来定义我的目录和文件(使用正确的路径)。我知道我的问题不在于找到我的文件或目录,因为它们在开始时已被完美定义并在整个脚本中使用。我试图写整个路径而不是变量,我得到了相同的结果。

4

2 回答 2

0
于 2013-08-06T07:25:21.710 回答
-1

我正在使用的版本awk,不喜欢字符转义

awk --version
GNU awk 3.1.7

spuder@cent64$ awk '{\$2="";\$3="";\$4=""; print \$0}' foo.txt 
awk: {\$2="";\$3="";\$4=""; print \$0}
awk:  ^ backslash not last character on line

试试下面的语法

awk '{for(i=2;i<=7;i++) $i="";print}' foo.txt

附带说明一下,如果您使用的是 Torque 4.x,您可能无法使用逗号分隔的作业列表 -W depend=,相反,您可能需要为每个作业创建一个新的 PBS 声明 (-W)。

例如...

#Invalid syntax in newer versions of torque 
qsub -W depend=foo,bar

资源

gawk 字段中的反斜杠
打印除前三列之外的所有列
http://docs.adaptivecomputing.com/torque/help.htm#topics/commands/qsub.htm#-W

于 2013-08-05T00:40:29.590 回答