Skip to content

Shell - Awk Command

Description

Syntax

Syntax of awk command:

awk [-Fs] [-v variable] [-f fichier] 'program' fichier

Arguments

See the detail of arguments:

Argument Définition Exemple
-v Injecter variable dans AWK awk -v VAR=$VAR '{print VAR}' file.txt
-F Séparateur de champs [Défaut ' '] awk -F';' '{print $1}' file.csv
-f Les commandes sont lus à partir d'un fichier awk -f script.awk

Variables

The awk command have several define variables:

Variable Signification Défaut
ARGC Nombre d'arguments de la ligne de commande -
ARGV Tableau des arguments de la ligne de commnde -
FILENAME Nom du fichier sur lequel on applique les commandes -
FNR Nombre d'enregistrements du fichier -
FS Separateur de champs en entrée " "
NF Nombre de champs de l'enregistrement courant -
NR Nombre d'enregistrements deja lu -
OFMT Format de sortie des nombres "%.6g"
OFS Separateur de champs pour la sortie " "
ORS Separateur d'enregistrement pour la sortie "\n"
RLENGTH Longueur de la chaine trouvée -
RS Separateur d'enregistrement en entrée "\n"
RSTART Debut de la chaine trouvée -
SUBSEP Separateur de subscript "\034"
IGNORECASE Ignorer la casse 0

Functions

Voici la liste des différentes fonctions pouvant être utilisées sur les chaînes de caractère avec awk.

  • s et t représentent des chaînes de caractères
  • r une expression régulière
  • i et n des entiers
Fonction Description
gsub(r,s,t) Sur la chaîne t, remplace toutes les occurrences de r par s
index(s,t) Retourne la position la plus à gauche de la chaîne t dans la chaîne s
length(s) Retourne la longueur de la chaîne s
match(s,r) Retourne l'index ou s correspond à r et positionne RSTART et RLENTH
split(s,a,fs) Split s dans le tableau a sur fs, retourne le nombre de champs
sprintf(fmt,liste expressions) Retourne la liste des expressions formatées suivant fmt
sub(r,s,t) Comme gsub, mais remplace uniquement la première occurrence
substr(s,i,n) Retourne la sous chaîne de s commençant en i et de taille n
tolower(s) Retourne la sous chaîne s en minuscule
toupper(s) Retourne la sous chaîne s en majuscule

Examples

Basic

Display text from word1 to word2:

awk '/word1/,/word2/' file.txt

Calculate column's sum:

awk '{TOTAL+=$1}END{print TOTAL}' file.txt

Calculate items number of a column:

awk 'END{print NR}' file.txt

Insert external vars:

# Méthode 1
var='word'
awk -v var=$var '$1 == var {print $2}' file.txt

# Méthode 2
awk '/'"$var"'/ {print $2}' file.txt
awk '$1 == "'"$var"'" {print $2}' file.txt

Select a Paragraph :

awk -v RS='' '/text/' file.txt

Do not take into account case:

# Method 1
echo 'LoKo' | awk -v IGNORECASE=1 '/^loko/'

# Method 2
echo 'LoKo' | awk 'tolower($0) ~ /^loko/'
echo 'LoKo' | awk 'toupper($0) ~ /^LOKO/'

Count number of row:

grep -v "^#" file.txt | awk -F"#" '{print $1," ",NF}'

Functions

Do not keep the first raw:

awk -F',' '{sub($1 FS,"")}1' file.txt

Add several values with convertion of value to TB:

values="326.777G
1.064T
217.852G"

echo "$values" | awk '{
    if($1 ~ /T/){
        gsub("T", "", $1); T += $1*1024
    }
    if($1 ~ /G/){
        gsub("G", "", $1); T += $1
    }
} END{print T}'
Back to top