在服务器中将awk脚本作为作业提交

在服务器中将awk脚本作为作业提交,awk,slurm,Awk,Slurm,我正在尝试使用SLURM作业数组在服务器中作为单个任务在多个文件中运行下面的awk脚本 array.sh: awk -f script.awk file1 file2 > file3 awk -f script.awk file1 file21 > file34 awk -f script.awk file1 file22 > file35 awk -f script.awk file1 file23 > file36 script.awk: FNR==NR {

我正在尝试使用SLURM作业数组在服务器中作为单个任务在多个文件中运行下面的awk脚本

array.sh:

awk -f script.awk file1 file2 > file3
awk -f script.awk file1 file21 > file34
awk -f script.awk file1 file22 > file35
awk -f script.awk file1 file23 > file36
script.awk:

FNR==NR {
        n = ++q[$1]
        min[$1 FS n] = $2
        max[$1 FS n] = $3
        next
    }

    # process file1
    n = q[$1] { # if no q entry, line cannot be in range
        for (i=1; i<=n; i++)
            if ( min[$1 FS i]<=$2 && $2<=max[$1 FS i]) {
                print
                next
            }
    }
我试过使用
#/bin/bash x+
这样我就可以检查发生了什么,但仍然不清楚

日志文件显示

==> 15103044_1.stdout <==
++ sed '1q;d' array.sh
+ eval awk -f script.awk file1 file2 '>' file3 
++ awk -f script.awk file1 file2 
但它继续生成空文件,这就是我在日志中找到的

==> 15103056_1.stdout <==
+ in=("file2", "file21", "file22", "file23")
+ awk -f script.awk file1 file2
文件2

A       1       5       1
A       6       20      1
B       1       10      1
B       30      60      1
C       10      20      1
E       1       6       1
输出文件3

A       1       1
A       20      1
B       33      1
C       10      1
C       20      1

您可以使用
#更改第一行(shebang)/bin/bash-x
(注意额外的
-x
)以准确查看发生了什么很难判断
slurm
是如何影响处理的。同意上面的说法,也许
-x
会显示一些东西。我也很惊讶,你说这是从命令行工作。要调试,sed“${SLURM\u ARRAY\u TASK\u ID}q;d”ARRAY.sh的输出是什么?我做了一个快速测试,我能得到的最好结果是它打印了文件的第一行,然后退出。不知道你为什么有
;d
(我知道
;d
sed
delete)。祝你好运。你有没有试着将awk与这个问题隔离开来(这似乎是关于使用slurm的问题)?例如,添加4行简单的代码,比如“echo 1”并运行它,然后尝试写入文件,“echo 1>file1”等等,首先查看是否得到输出,然后查看是否写入文件。在这些日志中,我不确定到底记录了什么,但在这两种情况下,命令都是在不重定向到文件的情况下打印的。这是预期的吗?这里有很多小碎片。1) a)您希望从
eval$(sed“${SLURM\u ARRAY\u TASK\u ID}q;d”ARRAY.sh)
中发生什么?b) 我看不出eval有什么帮助,也看不出你希望用它实现什么c)不清楚你为什么在cmd中使用
$(cmd substitution)
。您想要
var=$(eval$(sed…)
?d) 同样地,
sed
命令没有多大意义,请在问题的主体部分描述它应该实现什么。您是否理解并同意
sed
行的
set-x
输出是您所希望的?由于包含了
d
(delete)cmd,是否要删除该行?如果是这样,您必须保存该文件。大多数
linux
sed现在支持
sed-i'cmds'文件
将文件“就地”保存。2) 不清楚在slurm中使用
的位置=…
?我在[$SLURM\u ARRAY\u TASK\u ID]}.test中看到了
${,但不清楚该索引在做什么。添加更多样本数据和
set-x
跟踪到您的Q可能会有帮助。。。。。你的编辑有助于提高你的Q,但也许你看到外界对你的Q还不清楚。祝你好运。你可以用
#更改第一行(shebang)/bin/bash-x
(注意额外的
-x
)以准确查看发生了什么很难判断
slurm
是如何影响处理的。同意上面的说法,也许
-x
会显示一些东西。我也很惊讶,你说这是从命令行工作。要调试,sed“${SLURM\u ARRAY\u TASK\u ID}q;d”ARRAY.sh
的输出是什么?我做了一个快速测试,我能得到的最好结果是它打印了文件的第一行,然后退出。不知道你为什么有
;d
(我知道
;d
sed
delete)。祝你好运。你有没有试着将awk与这个问题隔离开来(这似乎是关于使用slurm的问题)?例如,添加4行简单的代码,比如“echo 1”并运行它,然后尝试写入文件,“echo 1>file1”等等,首先查看是否得到输出,然后查看是否写入文件。在这些日志中,我不确定到底记录了什么,但在这两种情况下,命令都是在不重定向到文件的情况下打印的。这是预期的吗?这里有很多小碎片。1) a)您希望从
eval$(sed“${SLURM\u ARRAY\u TASK\u ID}q;d”ARRAY.sh)
中发生什么?b) 我看不出eval有什么帮助,也看不出你希望用它实现什么c)不清楚你为什么在cmd中使用
$(cmd substitution)
。您想要
var=$(eval$(sed…)
?d) 同样地,
sed
命令没有多大意义,请在问题的主体部分描述它应该实现什么。您是否理解并同意
sed
行的
set-x
输出是您所希望的?由于包含了
d
(delete)cmd,是否要删除该行?如果是这样,您必须保存该文件。大多数
linux
sed现在支持
sed-i'cmds'文件
将文件“就地”保存。2) 不清楚在slurm中使用
的位置=…
?我在[$SLURM\u ARRAY\u TASK\u ID]}.test中看到了
${,但不清楚该索引在做什么。添加更多样本数据和
set-x
跟踪到您的Q可能会有帮助。。。。。你的编辑有助于提高你的Q,但也许你看到外界对你的Q还不清楚。祝你好运
A       1       1
A       20      1
B       17      1
B       33      1
C       10      1
C       20      1
E       7       1
A       1       5       1
A       6       20      1
B       1       10      1
B       30      60      1
C       10      20      1
E       1       6       1
A       1       1
A       20      1
B       33      1
C       10      1
C       20      1