Como o corpo do awk está entre aspas simples, o awk não vê a variável shell. o awk pensa que você quer dizer uma variável do awk i
. Essa variável é indefinida, portanto, em um contexto numérico, ela tem o valor zero. Assim $i
é interpretado pelo awk como $0
, ou toda a linha.
Você precisa passar a variável shell para o awk.
for ((i=1; i<=$count; i++))
do
abc=$(awk -F "," -v col=$i 'NR==1 {print $col}' $file)
#................^^^^^^^^^...............^^^^
echo "$abc"
done
No entanto, existe uma maneira melhor do que chamar o awk 3 vezes separadas:
while IFS=, read -ra fields; do
printf "%s\n" "${fields[@]}"
# or do stuff with the individual fields
for ((i=0; i < ${#fields[@]}; i++)); do
echo "${fields[i]}"
done
done < "$file"
- o loop
while
, com o conteúdo do arquivo redirecionado para ele, passa pelas linhas do arquivo -
IFS=,
instrui o comandoread
a fazer a divisão de palavras em vírgulas -
read -r
significa não interpretar nenhum caractere especial como nada além de caracteres regulares. -
read -a fields
lê as palavras na linha em uma variável de matriz chamadafields