我想结合sprio和squeue的输出,这样一来我就可以在不使用文件的情况下看到JobId,名称,优先级,年龄,状态和时间。我以为我可以使用awk,paste和一些管道来做到这一点,但是我不知道有什么bash语法足以做除输出要连续打印之外的任何事情。
{ sprio -u manninm; squeue -u $USER; } | paste
我想让每个输出的某些列并排打印,但是我只能让两个输出连续打印。如果有人可以为我提供一些资源或提出建议,谢谢。
JOBID PARTITION USER PRIORITY AGE FAIRSHARE JOBSIZE PARTITION TRES
284926 standard $USER 196140 117 95896 128 100000
JOBID PARTITION NAME USER ACCOUNT ST TIME NODES NODELIST(REASON)
284938 standard SM.fastq manninm kretzler PD 0:00 1 (Priority)
编辑: 因此,在阅读了一些awk教程之后,我实际上想要打印到屏幕上的是squeue命令的字段1-9和sprio命令的字段1和4。
{ squeue -u manninm; sprior -u $USER; } |
创建两个记录,我希望将记录1的字段1:9和记录2的字段1和4逐列打印到屏幕上。似乎没有我希望的那么容易。
答案 0 :(得分:1)
squeue
命令可以为您提供优先级。它接受一个--output
参数,您可以使用该参数选择希望squeue
通过printf样式格式字符串显示的列。默认情况下是
squeue --output "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R"
因此,如果您添加%p
或%Q
,则会在输出中获得具有工作优先级的附加列。
squeue --output "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %p"
或
squeue --output "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q"
%p
和%Q
之间的区别在于,前者将优先级作为浮点数,而后者将其优先级作为整数。
请注意,squeue
也接受--Format
(大写的'F'),它使用列名列表而不是格式字符串。
但是,您将不会获得优先级因素的详细信息。如果需要,确实需要合并squeue
和sprio
的输出。请确保尽管对输出进行排序,并确保squeue
仅列出了待处理的作业,否则您无法确定正确的行是否与awk
合并在一起。
在这种情况下,最好的选择是使用merge
命令,该命令将根据jobid协调两个命令的输出:
join <(squeue -t PD | sort -n) <(sprio | sort -n) | column -t
答案 1 :(得分:0)
使用上面我的评论中链接的“矩阵转置”概念,但将其简化为“一次要两行”,这似乎是您要拍摄的,请尝试使用这种awk
单线粘贴:
bash { sprio -u manninm; squeue -u $USER; } | awk 'NR%2 {split($0,a)} !(NR%2) {for(i=1;i<=NF;++i) print a[i],$i}'