Awk

Awk
Description de l'image The-AWK-Programming-Language.svg.
Description de l'image Awk-example.png.
Informations
Développé par Alfred Aho, Brian Kernighan et Peter WeinbergerVoir et modifier les données sur Wikidata
Première version Voir et modifier les données sur Wikidata
Dernière version IEEE Std 1003.1-2008Voir et modifier les données sur Wikidata
Dépôt github.com/onetrueawk/awkVoir et modifier les données sur Wikidata
Type Utilitaire UNIX (d)
Langage de script
Programmation procédurale
Data-driven programming (en)Voir et modifier les données sur Wikidata

awk — dont le nom vient des trois créateurs, Alfred Aho, Peter Weinberger et Brian Kernighan — est un langage de traitement par lignes de fichiers plats, disponible sur la plupart des systèmes Unix et sous Windows avec MinGW, Cygwin ou Gawk. Il est principalement utilisé pour la manipulation de fichiers textuels pour des opérations de recherches, de remplacement et de transformations complexes.

Présentation

Awk est le plus souvent utilisé pour la production de fichiers textes aux spécifications particulières (échanges entre différents systèmes d'informations hétérogènes). Il est aussi utilisé comme analyseur (parser) de fichiers XML ou de fichiers textes pour générer des commandes SQL à partir des données extraites. Il peut être utilisé enfin pour des opérations de calculs complexes et mise en forme de données brutes pour faire des tableaux statistiques.

On distingue awk, la commande originale, du new awk (nawk), arrivée un peu plus tard sur le marché. Les implémentations GNU de awk, sont en fait des new awk. On trouve en général la commande awk dans /usr/bin sous Unix, mais certains systèmes GNU/Linux la placent dans /bin. Cela impose un shebang du type #!/usr/bin/env awk -f pour assurer une portabilité maximale des scripts awk.

Il agit comme un filtre programmable prenant une série de lignes en entrée (sous forme de fichiers ou directement via l'entrée standard) et écrivant sur la sortie standard, qui peut être redirigée vers un autre fichier ou programme. Un programme Awk est composé de trois blocs distincts utilisables ou non pour le traitement d'un fichier (prétraitement, traitement, post-traitement). Awk lit l'entrée ligne par ligne, puis sélectionne (ou non) les lignes à traiter par des expressions rationnelles (et éventuellement des numéros de lignes). Une fois la ligne sélectionnée, elle est découpée en champs selon un séparateur d'entrée indiqué dans le programme awk par le symbole FS (qui par défaut correspond au caractère espace ou tabulation). Puis les différents champs sont disponibles dans des variables : $1 (premier champ), $2 (deuxième champ), $3 (troisième champ), …, $NF (dernier champ).

« awk » est aussi l'extension de nom de fichier utilisée pour les scripts écrits dans ce langage (rarement utilisée).

La syntaxe est inspirée du C :
awk [options] [programme] [fichier]
où la structure du programme est :
'motif1 { action1 } motif2 { action2 } …'
Chaque ligne du fichier est comparée successivement aux différents motifs (le plus souvent des expressions rationnelles, et globalement une expression booléenne) et l'action de chaque motif renvoyant la valeur vraie est exécutée dans l'ordre des motifs. Lorsque tous les motifs ont été évalués, le programme passe au traitement de la ligne suivante.

Quelques options :

  • -F séparateur : permet de modifier le séparateur de champs ;
  • -f fichier : lit le programme à partir d'un fichier.
  • -v awkVar=$shellVar : Permet de facilement intégrer des variables du shell dans le code awk.

Description technique

Un fichier est divisé en enregistrements (records en anglais) eux-mêmes divisés en champs (fields en anglais). Par défaut, les enregistrements sont des lignes et les champs sont des mots.

  • Les enregistrements sont séparés les uns des autres par un caractère spécial jouant le rôle de séparateur. Par défaut, c'est le séparateur de lignes (par défaut "\n"), ainsi un enregistrement est une ligne. Le nombre de lignes lues à un instant donné est stocké dans un compteur dénommé NR.
  • Chaque ligne est divisée en champs successifs, séparés par défaut par un espace ou une tabulation. Lors du traitement d'une ligne, le nombre de champ de cette ligne est contenu dans un compteur dénommé NF.

Les séparateurs d'entrée-sortie sont stockés dans des variables et peuvent être modifiés :

  • pour les lignes, les variables sont respectivement RS et ORS,
  • pour les champs, les variables sont respectivement FS et OFS
  • $n désigne le ne champ, où n est un entier strictement positif,
  • $0 désigne la ligne entière.

On dispose de deux motifs spéciaux :

  • BEGIN : ce motif est vrai uniquement avant le traitement de la première ligne ;
  • END : ce motif est vrai uniquement une fois qu'il ne reste plus de lignes à traiter.

Pour définir un intervalle, on utilise la virgule comme ceci :

  • NR == 1, NR == 10 : l'action associée sera appliquée aux lignes 1 à 10.

Plusieurs fonctions sont déjà implémentées :

  • print, printf : fonctions d'affichage ;
  • cos(expr), sin(expr), exp(expr), log(expr) ;
  • getline() : lit l'entrée suivante d'une ligne, et retourne 0 s'il s'agit de la fin du fichier (EOF : end of file), 1 sinon ;
  • index(s1, s2) : retourne la position de la chaîne de caractères s2 dans la chaîne s1, et retourne 0 si s2 ne figure pas dans s1 ;
  • int(expr) : partie entière d'une expression ;
  • length(s) : longueur de la chaîne s ;
  • substr(s,n,l) : retourne la partie de la chaîne de caractères s commençant à la position n, et d'une longueur l.

On dispose de structures de contrôles. La syntaxe provient directement du C :

  • if (test) {actions} else {actions}
  • while (test) {actions}
  • do {actions} while (test)
  • for (expr1;expr2;expr3) {actions}
  • continue : passe à l'élément suivant dans une boucle
  • break : sort d'une boucle
  • function nom(args) { actions} : définit une nouvelle fonction. La grammaire de awk ne prévoit pas de variables locales, et il est d'usage de les déclarer comme argument.

Par rapport au C, il y a quelques extensions :

  • next : passe à la ligne suivante
  • tableaux associatifs : tableau[texte]=valeur
  • for (var in tableau) {actions}

Quelques exemples

  • awk '{print $0}' fichier : affiche toutes les lignes de fichier (idem que cat fichier).
  • awk '/2/ {print $0}' fichier : affiche toutes les lignes où le caractère 2 est présent (idem que grep '2' ref.txt).
  • awk '$1~/2/ {print $0}' fichier : affiche toutes les lignes où le caractère 2 est présent dans le premier champ.
  • awk '{print NR ":", $0}' fichier : affiche le contenu de fichier, mais chaque ligne est précédée de son numéro.
  • awk -F: '{print $1}' /etc/passwd : renvoie la liste des utilisateurs (idem cut -d : -f 1 /etc/passwd).
  • awk 'BEGIN {FS = ":"}{print $1}' /etc/passwd : idem que la précédente commande
  • awk '{s=s+$1} END {print s}' fichier : écrit la somme de tous les nombres de la première colonne de fichier.
  • awk '/Motif1/ , /Motif2/' fichier : écrit toutes les lignes contenues dans le fichier entre le Motif1 et le Motif2.

Implémentation

Il existe divers programmes qui utilisent la syntaxe du awk original, voici les plus connus :

  • nawk (abréviation de new awk), qui étend les fonctionnalités de la version initiale ;
  • mawk, une version connue pour sa rapidité dans certains cas ;
  • gawk, la version du GNU disponible sous les principaux OS, avec une modification qui existe pour travailler sur le réseau TCP/IP ;
  • jawk, une version fonctionnant sur la machine virtuelle Java.

Voir aussi

Bibliographie

  • Alfred V. Aho, Peter J. Weinberger et Brian W. Kernighan, AWK Langage de programmation, Paris/Reading (Mass.)/Amsterdam etc., Éd. Addison-Wesley France, , 244 p. (ISBN 2-87908-110-6)
  • Steve Bourne (trad. Michel Dupuy), Le Système UNIX, Paris, Dunod, , 398 p. (ISBN 2-7296-0014-0)
  • Pour plus d'informations Shellunix.com

Articles connexes

  • GNU Awk
  • Commandes Unix
  • sed, un autre processeur de fichier, spécialisé dans le traitement de fichiers textes non organisés, basé sur la correspondance de motifs (en anglais, pattern matching) et non sur les colonnes et les lignes.

Liens externes

Read other articles:

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目可参照英語維基百科相應條目来扩充。 (2022年12月23日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 此條目需要补充更多来源。 (2022年12…

Donald Martin Carroll (November 25, 1909 – January 3, 2002) was an American Roman Catholic priest. Born in Chicago, Illinois, Carroll was ordained a Roman Catholic priest for the Roman Catholic Archdiocese of Chicago, Illinois on April 7, 1934. On June 27, 1956, he was appointed Bishop of the Roman Catholic Diocese of Rockford, Illinois, but resigned on September 25, 1956 before his consecration due to ill health.[1][2] Notes ^ Donald Martin Carroll ^ History of the Diocese…

American judge This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Ralph P. Lowe – news · newspapers · books · scholar · JSTOR (September 2014) (Learn how and when to remove this message) Ralph Phillips Lowe4th Governor of IowaIn officeJanuary 13, 1858 – January 11, 1860Preceded byJames W. GrimesSucceede…

 烏克蘭總理Прем'єр-міністр України烏克蘭國徽現任杰尼斯·什米加尔自2020年3月4日任命者烏克蘭總統任期總統任命首任維托爾德·福金设立1991年11月后继职位無网站www.kmu.gov.ua/control/en/(英文) 乌克兰 乌克兰政府与政治系列条目 宪法 政府 总统 弗拉基米尔·泽连斯基 總統辦公室 国家安全与国防事务委员会 总统代表(英语:Representatives of the President of Ukraine) 总理…

American direct broadcast satellite and streaming TV company DIRECTV, LLCLogo since August 2, 2021FormerlyThe DirecTV Group, Inc. (2005–2015)Company typeJoint ventureTraded asNasdaq: DTVIndustryMultichannel video programming distributorPredecessorHughes ElectronicsFoundedJune 17, 1994; 29 years ago (1994-06-17) (as DirecTV)HeadquartersEl Segundo, California, United StatesAreas servedUnited States, Latin America, the Caribbean and EuropeProductsmultichannel linear pay tel…

Handheld game console by Sega Genesis NomadAlso known asSega NomadManufacturerSegaTypeHandheld game consoleGenerationFifthRelease dateNA: October 1995DiscontinuedNA: 1999Units soldAbout one millionMediaSega Genesis ROM cartridgeCPUMotorola 68000Display 3.25-inch backlit color screen AV connector 320x224d (NTSC) Sound Mono speaker Headphone jack Power6 AA batteries, 4 hoursPredecessorGame GearMega Jet The Genesis Nomad, also known as Sega Nomad, is a handheld game console manufactured by Sega and…

Awal The Knight's Tale pada manuskrip Ellesmere. Awal The Wife of Bath's Tale dari manuskrip Ellesmere. Manuskrip Ellesmere yang memuat The Canterbury Tales karangan Geoffrey Chaucer, adalah sebuah naskah manuskrip yang berasal dari abad ke-15. Naskah manuskrip ini sekarang disimpan di Perpustakaan Huntington Library, di San Marino, Kalifornia (MS EL 26 C 9). Selain manuskrip ini, ada sebuah manuskrip awal lainnya yang memuat teks yang sama dan disebut sebagai Manuskrip Hengwrt. Para pakar berpe…

Ini adalah nama Korea; marganya adalah Kang. Kang Han-naKang pada tahun 2019LahirKang Han-na30 Januari 1989 (umur 35)Seoul, Korea SelatanAlmamaterUniversitas Chung-AngPekerjaanAktrisTahun aktif2009–sekarangAgenKeyEastNama KoreaHangul강한나 Alih AksaraGang Han-naMcCune–ReischauerKang Han-na Kang Han-na (lahir 30 Januari 1989) adalah aktris Korea Selatan.[1][2] Kang telah membintangi beberapa film dan seri televisi, termasuk di antaranya Moon Lovers: Scarlet Heart …

This article needs attention from an expert in Palaeontology. The specific problem is: Several of the genus names appear to be invalid. E.g. Heteromorpha appears to be a suppressed name for an ammonite. WikiProject Palaeontology may be able to help recruit an expert. (May 2018) This list of the Mesozoic life of Alabama contains the various prehistoric life-forms whose fossilized remains have been reported from within the US state of Alabama and are between 252.17 and 66 million years of age. A C…

Metadata storage for software revision control In version control systems, a repository is a data structure that stores metadata for a set of files or directory structure.[1] Depending on whether the version control system in use is distributed, like Git or Mercurial, or centralized, like Subversion, CVS, or Perforce, the whole set of information in the repository may be duplicated on every user's system or may be maintained on a single server.[2] Some of the metadata that a repo…

Benteng Al Zubara حصن الزبارة Zubarah Benteng Al Zubara Jenis Benteng bersejarah Koordinat 25°58′37″N 51°02′43″E / 25.9769°N 51.0454°E / 25.9769; 51.0454Koordinat: 25°58′37″N 51°02′43″E / 25.9769°N 51.0454°E / 25.9769; 51.0454 Dibangun 1938 Pembangun Sheikh Abdullah bin Jassim Al Thani Bahanbangunan Batu kapur, lumpur dan kayu Digunakan 1938-pertengahan 1980an: Stasiun Penjaga PantaiPertengahan 1980an-sekarang: Mus…

British playwright and radio dramatist (1938–2022) This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources. Find sources: David Pownall – news · newspapers · books · scholar · JSTOR (December 2022) (Learn how and when to remove this message) David Pownall FRSL (19 May 1938 – 21 November 2022) was a British playwright and prolific radio dramatist performed internationally, an…

العلاقات السويدية الجيبوتية السويد جيبوتي   السويد   جيبوتي تعديل مصدري - تعديل   العلاقات السويدية الجيبوتية هي العلاقات الثنائية التي تجمع بين السويد وجيبوتي.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة الس…

Greek decoration Order of Honour Τάγμα της Τιμής Grand Cross and Star of the Order of Honour, final versionAwarded by the President of the Hellenic RepublicTypeOrderEstablished18 August 1975Country GreeceMottoΟ Αγαθός μόνος τιμητέος Only the virtuous to be honouredAwarded fordistinguished services to Greece and in the public sphereStatusCurrently constitutedGradesGrand Cross Grand Commander Commander Gold Cross Silver CrossPrecedenceNext (higher)Order of the…

Random search tree data structure TreapTypeRandomized binary search treeTime complexity in big O notationOperation Average Worst caseSearch O(log n) O(n)Insert O(log n) O(n)Delete O(log n) O(n)Space complexitySpace O(n) O(n) Part of a series onProbabilisticdata structures Bloom filter Count sketch Count–min sketch Quotient filter Skip list Random trees Random binary tree Treap Rapidly exploring random tree Related Randomized algorithm HyperLogLog vte In computer science, the treap and the rand…

Kocu Andre Hutagalung adalah seorang pegawai Indonesia kelahiran Pematang Siantar pada tahun 1971. Ia merupakan alumni Jurusan Fisika dan meraih gelar Sarjana Sains dari Universitas Indonesia pada tahun 1995. Dia kemudian meneruskan pendidikan di Fakultas Pasca Sarjana Universitas Indonesia untuk bidang Material Science pada tahun 1998. Pada tahun 2004, ia menempuh pendidikan Asuransi di London Metropolitan University dan memperoleh gelar ACII dari Chartered Insurance Institute (CII) United King…

City in Tehran province, Iran For the administrative division, see Arjomand District. For other places with the same name, see Arjomand. City in Tehran, IranArjomand Persian: ارجمندCityArjomandCoordinates: 35°48′50″N 52°30′51″E / 35.81389°N 52.51417°E / 35.81389; 52.51417[1]CountryIranProvinceTehranCountyFiruzkuhDistrictArjomandPopulation (2016)[2] • Total1,124Time zoneUTC+3:30 (IRST) Arjomand (Persian: ارجمند)[…

夂 ← 士 (Sĩ) 夂 (Trĩ) 夊 (Tuy) → 夂 (U+5902) theo sau mà đếnBính âm:zhǐChú âm phù hiệu:ㄓˇWade–Giles:chih3Phiên âm Quảng Đông theo Yale:jīViệt bính:zi1Pe̍h-ōe-jī:chíKana:チ chiKanji:冬頭 fuyugashiraHangul:뒤져올 dwijeoolHán-Hàn:치 chiCách viết: Bộ Trĩ (夂), cũng được gọi là bộ Truy, nghĩa là theo sau mà đến là một trong 31 bộ thủ được cấu tạo từ 3 nét trong số 214 …

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Police bus – news · newspapers · books · scholar · JSTOR (March 2008) (Learn how and when to remove this message) New York City Police Department Bus A Sunsundegui Sideral police bus used by Police Scotland in Thurso, UK. A police bus, also known as a police van i…

На фото развивающегося плода человека виден хвост; в дальнейшем, если развитие плода происходит правильно, он исчезает. Также видны жаберные мешки[1]. Атави́зм (от лат. atavus «отдалённый предок») — появление у отдельных организмов данного вида признаков, свойственных …