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 comandoreada fazer a divisão de palavras em vírgulas -
read -rsignifica não interpretar nenhum caractere especial como nada além de caracteres regulares. -
read -a fieldslê as palavras na linha em uma variável de matriz chamadafields