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

时间:2015-02-16 11:56:53

标签: bash awk sungridengine

我可以使用以下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文件并且我需要分配多个变量,那么它是如何完成的?

1 个答案:

答案 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范围内(在单引号内)。