我可以使用以下bash脚本从ids文件的每一行(在本例中为前1000行)中分配变量ID,并将其作为参数运行到pythonscript.py。
#!/bin/bash
#$ -t 1:1000
#$ -N thename
#$ -j y
ids=NOBACK/ids.txt
echo "Starting on : $(date)"
echo "Running on node : $(hostname)"
echo "Current directory : $(pwd)"
echo "Current job ID : $JOB_ID"
echo "Current job name : $JOB_NAME"
echo "Task index number : $SGE_TASK_ID"
ID=`awk "NR==$SGE_TASK_ID" {IDS}`
echo "id is: $ID"
python pythonscript.py --idarg ID
echo "Finished on : $(date)"
但是如果文件是csv文件并且我需要分配多个变量,那么它是如何完成的?
答案 0 :(得分:1)
想象一下,你有以下csv文件(名为super.csv):
name,postcode,dob
alan,XXXAAA,11/11/55
bruji,AAAXXX,20/10/88
...
zorri,AXAXAX,01/01/01
并且您希望在sungrid引擎数组作业中使用第一个和第三个字段作为参数。 以下将从车道等于$ SGE_TASK_ID:
中提取字段NAME=$(awk -F, -v "line=$SGE_TASK_ID" 'NR==line {print $1}' super.csv)
DOB=$(awk -F, -v "line=$SGE_TASK_ID" 'NR==line {print $3}' super.csv)
我正在弄乱双引号和单引号。 bash将忽略单引号内的$ var并在双引号内扩展变量。这里-v是将$ SGE_TASK_ID变量注入到awk范围内(在单引号内)。