在 unix 中结合 paste 和 cat

Combining paste and cat in unix

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

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

其中 name1name2character stringid 是一个数字,这三个对于每个文件都是唯一的。 (这些是来自 slurm 运行 的标准输出文件,id 是作业 ID)。

我想知道这些作业是否失败了,所以我想从每个文件名中 cut'ing id

ls -1 *.ERR | cut -d "." -f 3

然后在前面粘贴"sacct -j "。 是否有一个衬板可以实现这一点,以便 运行s:

sacct -j id1

sacct -j id2

.
.

sacct -j idn

类似于:

for id in $(ls *.ERR | cut -d "." -f 3); do echo "machine: $id"; done

如果文件不是很多(几千个)就可以了。将 echo blah blah 替换为 sacct -j,如下所示:

for id in $(ls *.ERR | cut -d "." -f 3); do sacct -j $id; done

还有其他方法。

您可以简单地使用 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