Reputation: 1526
Currently I am doing following
#!/bin/bash -l
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4
scontrol show hostname $SLURM_JOB_NODELIST | perl -ne 'chomb; print "$_" x4' > myhostfile
This generates the following myhostfile
compute-0
compute-0
compute-0
compute-0
compute-1
compute-1
compute-1
compute-1
I would like to have the following outcome
compute-0
compute-1
compute-0
compute-1
compute-0
compute-1
compute-0
compute-1
So that we alternate between all specified nodes
Upvotes: 0
Views: 1267
Reputation: 54323
You can do it like this:
$ perl -e 'print +(<>) x 4'
This removes the -n
loop from your code, and instead reads the entire STDIN
in one go. We need the parentheses ()
to get the read operator into list context, so it reads all lines at once. The +
tells the perl interpreter that the parentheses are a list, and not part of the print
(as print()
). Finally the repeat operator x
in list context repeats the entire list.
$ cat foo
0
1
$ cat foo | perl -e 'print +(<>) x 4'
0
1
0
1
0
1
0
1
Upvotes: 2