[LINUX] Remarque sur awk

Parfois, j'utilise awk. Cependant, c'est un peu rythmé en quelques mois, donc à chaque fois que je l'utilise, j'obtiens "ça? Comment l'utiliser?" Depuis que j'ai fait la recherche sur le net, je liste celles que j'utilise souvent.

Vous pouvez l'utiliser simplement en sachant ceci

Les détails de chaque élément sont les suivants

Super basique

Supposons que vous ayez un fichier comme celui-ci:

sample.txt


No data1 data2 data3
1  101   102   103
2  201   202   203
3  301   302   303
4  401   402   403

Préparez le script awk comme ci-dessous

sample.awk


{
  print $1 " " $3
}

Spécifiez sample.txt après avoir spécifié le script avec l'option -f du terminal.

$ awk -f sample.awk sample.txt

La sortie est la suivante.

No data2
1  102  
2  202  
3  302  
4  402  

Commentaire

print

production

Variables $ 1 à $ ...

Contient chaque élément dans une ligne.

sample.txt


No data1 data2 data3 <----- $1 = "No", $2 = "data1", $3 = "data2", $4 = "data3" 
1  101   102   103
2  201   202   203
3  301   302   303
4  401   402   403

Obtenez la somme pour chaque colonne

Supposons que vous ayez un fichier comme celui-ci:

sample.txt


No data1 data2 data3
1  101   102   103
2  201   202   203
3  301   302   303
4  401   402   403

Préparez le script awk comme ci-dessous

sample.awk


{
    if(NR > 1){
        sum1 += $2;
        sum2 += $3;
        sum3 += $4;
    }
}

END {
    print sum1 " " sum2 " " sum3;
}

Spécifiez sample.txt après avoir spécifié le script avec l'option -f du terminal.

$ awk -f sample.awk sample.txt

La sortie est la suivante.

1004 1008 1012

Commentaire

NR variable

Nombre actuel de lignes. Dans cet exemple, la première ligne est le titre, il est donc ignoré.

END

Terminer le traitement. Ici, la valeur totale est sortie.

Je veux obtenir le total pour chaque ligne.

Supposons que vous ayez un fichier comme celui-ci:

sample.txt


No data1 data2 data3
1  101   102   103    <----- 101 + 102 +Je veux trouver 103.
2  201   202   203
3  301   302   303
4  401   402   403

Préparez le script awk comme ci-dessous

sample.awk


{
    sum = 0;
    for(i=2; i<=NF; i++) {
        sum += $i;
    }
    print sum;
}

Spécifiez sample.txt après avoir spécifié le script avec l'option -f du terminal.

$ awk -f sample.awk sample.txt

La sortie est la suivante.

0
306
606
906
1206

Commentaire

Variable NF

Contient le nombre d'éléments dans chaque ligne.

Les délimiteurs de fichiers sont des virgules au lieu d'espaces

Supposons que vous ayez un fichier comme celui-ci:

sample.txt


No,data1,data2,data3
1,101,102,103
2,201,202,203
3,301,302,303
4,401,402,403

Préparez le script awk comme ci-dessous

sample.awk


BEGIN {
    FS = ",";
}

{
  print $1 " " $3
}

Spécifiez sample.txt après avoir spécifié le script avec l'option -f du terminal.

$ awk -f sample.awk sample.txt

La sortie est la suivante.

No data2
1 102
2 202
3 302
4 402

Commentaire

Variable FS

Position de séparation de chaque élément. La valeur par défaut est vide.

START

Vous pouvez écrire le processus de démarrage.

Les délimiteurs de fichiers sont des virgules et non des espaces. De plus, chaque élément contient une virgule.

sample.txt


No,data1,data2,data3
1,101,"102,101",103
2,201,202,203
3,301,"302,101",303
4,401,402,403

Préparez le script awk comme ci-dessous

sample.awk


BEGIN {
    FPAT = "([^,]+)|(\"[^\"]+\")"
}

{
    print $1 " " $3
}

Spécifiez sample.txt après avoir spécifié le script avec l'option -f du terminal.

$ awk -f sample.awk sample.txt

La sortie est la suivante.

No data2
1 "102,101"
2 202
3 "302,101"
4 402

Commentaire

FPAT variable

Chaque élément peut être décrit par une expression régulière.

Recommended Posts

Remarque sur awk
Remarque sur les pointeurs (Go)
Une note sur mprotect (2)
Note
Note
Une note sur KornShell (ksh)
Une note sur TensorFlow Introduction
Une note sur [python] __debug__
Remarque à propos de get_scorer de sklearn
Une note sur mock (bibliothèque fictive Python)
Django Note 4
À propos de LangID
À propos de CAGR
À propos de virtiofs
À propos de python-apt
note de pyenv
À propos de l'autorisation
À propos de sklearn.preprocessing.Imputer
À propos de Gunicorn
À propos de requirements.txt
À propos des paramètres régionaux
À propos de l'axe = 0, axe = 1
Remarque: Python
À propos de numpy
À propos de pip
À propos de numpy.newaxis
Note de Python
À propos d'Endian
À propos de Linux
À propos de l'importation
Django Note 1
note de direnv
À propos de Linux
Django Note 3
Django Note 2
À propos de Linux
À propos de cv2.imread
À propos de _ et __
À propos de wxPython
[Note] RepresenterError
Un mémo que j'ai essayé le tutoriel Pyramid
Écrire une note sur la version python de python virtualenv
Analyse de données en Python: une note sur line_profiler
Une note sur la nouvelle classe de base de style
Modificateurs de vérification des mémos avec MaxPlus