在服务器中将awk脚本作为作业提交
我正在尝试使用SLURM作业数组在服务器中作为单个任务在多个文件中运行下面的awk脚本 array.sh:在服务器中将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 {
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