Calculer la somme d'une colonne en utilisant le script "Awk" dans Bash
Différents exemples de calcul de la somme d'une colonne
La commande « awk » peut être utilisée de différentes manières pour calculer la somme d'une colonne dans un fichier contenant des données numériques. Le fichier peut être un fichier CSV ou un fichier texte. Différentes manières de calculer la somme d'une colonne sont présentées dans cette partie du tutoriel.
Exemple 1 : Calculer la somme d'une colonne en utilisant la simple commande « Awk »
Créez un fichier texte nommé « courses.txt » avec les données suivantes. La deuxième colonne de ce fichier contient des données numériques et le fichier ne contient aucune donnée d'en-tête :
CSE202 2.0
CSE407 1.0
CSE305 3.0
ACC101 2.0Créez un fichier Bash avec le script suivant qui prend le nom de fichier de l'utilisateur. Si le nom de fichier correspond au fichier "courses.txt", la somme des valeurs de la deuxième colonne de ce fichier est calculée à l'aide de la commande "awk". La commande "awk" est utilisée avec la commande "cat" ici pour lire le contenu de la deuxième colonne du fichier "courses.txt". Ensuite, la valeur de la somme est imprimée.
#!/bin/bash
#Take the filename
echo -n "Enter the filename: "
read filename
#Check the valid filename is given or not
if [[ $filename != "courses.txt" ]]; then
echo "Invalid filename is given."
exit 0
fi
#Calculate the sum of total credit hours
total=`cat $filename | awk '{sum+=$2} END {print "Total course credit hours: " sum}'`
#Print the calculated value
echo $totalLa sortie suivante montre la somme de 2.0+1.0+3.0+2.0 qui est 8.0 :
Exemple 2 : Calculer la somme d'une colonne en utilisant la simple commande « Awk » avec NR
Créez un fichier CSV nommé « employees.csv » avec les données suivantes. La troisième colonne de ce fichier contient des données numériques et le fichier contient les en-têtes :
ID, Name, Salary
5623, Mehrab Hossain, 90000
1355, Mila Chowdhury, 125000
3517, Jafar Iqbal, 300000
7554, Zia Rahman, 450000
8652, Rupa Chakrobarty, 260000Créez un fichier Bash avec le script suivant qui prend le nom de fichier comme argument de ligne de commande. Si le nom de fichier correspond au fichier "employees.csv", la somme des valeurs de la troisième colonne, en excluant l'en-tête de ce fichier, est calculée à l'aide de la commande "awk". La commande "awk" utilise la valeur "NR" ici pour omettre l'en-tête de la troisième colonne du fichier. Ensuite, la valeur de la somme est imprimée.
#!/bin/bash
#Check whether the filename is given or not
if [ $# -lt 1 ]; then
echo "Argument missing."
exit 0
fi
filename=$1
#Check whether the valid filename is given or not
if [[ $filename != "employees.csv" ]]; then
echo "Invalid filename is given."
exit 0
fi
#Calculate the sum of the Salary field of the employees.csv file
total=`awk -F "," 'NR!=1{Total=Total+$3} END{print "Total salary of the employees is: $" Total}' >#Print the calculated value
echo $totalLe script est exécuté deux fois dans la sortie suivante. Le script est exécuté sans aucun argument lors de la première exécution, donc le message d'erreur est imprimé. Le script est exécuté avec une valeur d'argument valide lors de la deuxième exécution, donc la valeur de la somme est imprimée :
Exemple 3 : Calculer la somme d'une colonne en utilisant la commande simple « Awk » avec FS
Créez un fichier texte nommé « sales.txt » avec les données suivantes. Le « : » est utilisé dans le fichier pour séparer la colonne et la deuxième colonne de ce fichier qui contient les données numériques. Le fichier ne contient aucune donnée d'en-tête.
Jan:60000
Feb:34000
Mar:120000
Apr:56000
May:65000
Jun:20000Créez un fichier Bash avec le script suivant qui prend le nom de fichier de l'utilisateur. Si le nom de fichier correspond au fichier 'sales.txt', la somme des valeurs de la deuxième colonne de ce fichier est calculée à l'aide de la commande 'awk'. La commande 'awk' est utilisée avec la valeur 'FS' ici pour définir le séparateur de champ entre les colonnes du fichier. Ensuite, la valeur de la somme est imprimée.
#!/bin/bash
#Take the filename
echo -n "Enter the filename: "
read filename
#Check whether the valid filename is given or not
if [[ $filename != "sales.txt" ]]; then
echo "Invalid filename is given."
exit 0
else
#Print the file content
cat $filename
fi
#Print the total sales amount using the field separator
cat $filename | awk 'BEGIN{FS=":"; sum=0} {sum+=$2} END{print "Total sales: $" sum}'La sortie suivante apparaît si « sales.txt » est prise comme entrée :
Conclusion
Cette tutorial montre plusieurs façons de calculer la somme d'une colonne à partir d'un fichier en utilisant la commande « awk ».


