在unix

时间:2017-01-07 06:11:10

标签: unix paste cut

我有这种名称格式的文件:

<name1>.<name2>.<id>.ERR

其中name1name2character 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 名词

2 个答案:

答案 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