awk在循环时递增输入字段

时间:2015-04-01 15:20:21

标签: for-loop awk

我在数组上有一个for循环。我目前一直在寻找11美元的领域。但是,现在我想做的是每次检查一个不同的字段。

  • i是第一个元素时,我想查看$11字段。
  • i是第二个元素时,我想查看$12字段。
  • i是第三个时,我想查看$13字段。

我目前正在使用:

for i in "${array[@]}"
do
    awk -v OFS="\t" -v str1="$i" -v thr="$THR" '{ if($11>=thr)  print "chr" $1, $2 ,$3 , str1 ;}' comb.txt > $i".bed"    
done

我该怎么做?

我的变量如下:

STR1="CD45RA+_naive"
STR2="CD45RO+_mem"
STR3="CD127-_Treg"
STR4="IL17-_Th_stim_MACS"
STR5="IL17+_Th17_stim"
array=($STR1 $STR2 $STR3 $STR4 $STR5)
THR=10

1 个答案:

答案 0 :(得分:2)

给定数组names,您可以通过执行以下操作来遍历其值并了解索引:

for ((i=0; i<${#names[@]}; i++))
do
   echo "$i, ${names[$i]}"
done

例如,

$ names=('a' 'b' 'c')
$ for ((i=0; i<${#names[@]}; i++)); do echo "$i, ${names[$i]}"; done
0, a
1, b
2, c

根据这个逻辑,你可以说:

for ((i=0; i<${#array[@]}; i++))
do
   awk -v index="$i" -v str1="${names[$i]}" -v thr=$THR '{ if($(index+11)=>thr) ... }' comb.txt
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                 ^^^^^^^^^^^^^^
done

也就是说,您将索引$ i作为index提供给awk,将值${names[$i]}提供为str。然后,在awk代码中,您可以使用索引值,通过说index + 10或者您需要对该数字执行的操作。