você pode passar variáveis para awk
e seu comando ficaria assim:
awk -v col1=1 -v col2=2 '{ for(i=1; i<=NF;i++) {if (i == $col1 || i == $col2 ) sum+=$i}; print(sum); sum=0 }' $FILE
-
-v
var=value
atribui valor à variável de programa var.
você pode adicionar quantas colunas desejar, basta adicionar -v colx=value
e adicionar ot à condição || i == $colx
Se você quiser passar o número de colunas para shell script, você pode adicioná-los em uma matriz digamos columnsArray
, então crie uma variável columns=$(echo "${columnsArray[@]}")
, então o seu comando deve ficar assim:
awk -v outCols="$columns" 'BEGIN{split(outCols, cols, " ")} { for(i=1; i<=NF;i++) {if (i in cols ) sum+=$i}; print(sum); sum=0 }' $FILE
por exemplo
#!/bin/bash
columns=$(echo "$@")
awk -vcolss="$columns" 'BEGIN{split(colss, cols, " ")}{ for(i=1; i<=NF;i++) {if (i in cols ) sum+=$i}; print(sum); sum=0 }' test
retornaria:
3
3
1