我有这种名称格式的文件:
<name1>.<name2>.<id>.ERR
其中name1
和name2
为character
string
s,id
是一个数字,所有三个文件都是唯一的。 (这些是slurm
运行的标准输出文件,id
是作业ID。
我想知道这些工作是否失败,所以我想从每个文件名中cut
'id
:
ls -1 *.ERR | cut -d "." -f 3
然后在它前面粘贴"sacct -j "
。
是否有一个衬里可以达到这个目的,以便它运行:
sacct -j id
1
sacct -j id
2
.
.
sacct -j id
名词的
答案 0 :(得分:1)
类似的东西:
for id in $(ls *.ERR | cut -d "." -f 3); do echo "machine: $id"; done
如果文件不是很多(数千),将起作用。用sacct -j替换echo blah blah,像这样:
for id in $(ls *.ERR | cut -d "." -f 3); do sacct -j $id; done
还有其他方法。
答案 1 :(得分:1)
您只需使用xargs
:
ls -1 *.ERR | cut -d "." -f 3 | xargs -L 1 sacct -j
您可以与-P
选项并行运行,以减轻询问数据库的延迟时间。
ls -1 *.ERR | cut -d "." -f 3 | barges -P 4 -L 1 sacct -j