使用 csv 文件中的字段作为 sge 数组作业中的变量 - awk

Using fields in a csv file as variable in sge array job - awk

我可以使用以下 bash 脚本从 ids 文件的每一行(在本例中为前 1000 行)分配一个变量 ID,运行 它作为 [=15= 的参数].

#!/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文件,我需要分配多个变量,怎么办?

假设您有以下 csv 文件(名为 super.csv):

 name,postcode,dob
 alan,XXXAAA,11/11/55
 bruji,AAAXXX,20/10/88
 ...
 zorri,AXAXAX,01/01/01

并且您想在太阳网格引擎阵列作业中使用第一个和第三个字段作为参数。 以下将从等于 $SGE_TASK_ID:

的车道中提取字段
NAME=$(awk -F, -v "line=$SGE_TASK_ID" 'NR==line {print }' super.csv)
DOB=$(awk -F, -v "line=$SGE_TASK_ID" 'NR==line {print }' super.csv)

我弄乱了双引号和单引号。 bash 将忽略单引号内的 $ var 并扩展双引号内的变量。这里 -v 将 $SGE_TASK_ID 变量注入 awk 范围(在单引号内)。