我想用bash或awk或任何东西来做以下事情。我有一个文件看起来像:

/exec/proc1 ...
/exec/proc1 ...
/exec/proc1 ...
/exec/proc1 ...
/exec/proc1 ...
/exec/proc1 ...

如果我说3,即(0,1,2),我想生成如下文件:
export DEVICE_ID=0; /exec/proc1 ...
export DEVICE_ID=0; /exec/proc1 ...
export DEVICE_ID=1; /exec/proc1 ...
export DEVICE_ID=1; /exec/proc1 ...
export DEVICE_ID=2; /exec/proc1 ...
export DEVICE_ID=2; /exec/proc1 ...

然后,我将其导入shuf中,这将使行随机化。这是一个穷人的解决方案负载平衡跨多个CUDA GPU设备。

最佳答案

使用awk可以执行以下操作:

awk -v n=3 '{print "export DEVICE_ID=" (NR-1)%n "; " $0}' file
export DEVICE_ID=0; /exec/proc1 ...
export DEVICE_ID=1; /exec/proc1 ...
export DEVICE_ID=2; /exec/proc1 ...
export DEVICE_ID=0; /exec/proc1 ...
export DEVICE_ID=1; /exec/proc1 ...
export DEVICE_ID=2; /exec/proc1 ...
export DEVICE_ID=0; /exec/proc1 ...
export DEVICE_ID=1; /exec/proc1 ...
export DEVICE_ID=2; /exec/proc1 ...
export DEVICE_ID=0; /exec/proc1 ...

关于linux - 如何在文件的每一行的开头均匀添加一组值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27383977/

10-11 16:34