{"id":487,"date":"2023-03-16T14:15:29","date_gmt":"2023-03-16T14:15:29","guid":{"rendered":"https:\/\/lasg.dk\/wp\/?p=487"},"modified":"2025-12-23T14:53:45","modified_gmt":"2025-12-23T14:53:45","slug":"awk-intro","status":"publish","type":"post","link":"https:\/\/lasg.dk\/wp\/awk-intro\/","title":{"rendered":"AWK intro"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">\n\n[-----------------------------\n[ $ cat 00_intro.txt ]\n\nAWKing af Lars Sommer, lasg@lasg.dk\n2005-04-20\n\nDette er en r\u00cakke simple eksempler p\u00c2 hvad programmet awk kan bruges til.\nAwk kan meget, og der er skrevet hele b\u00afger om det. Jeg vil kun gennemg\u00c2 det\n meget overfladisk.\nDu kan m\u00c2ske bruge mine noter og eksempler som en lille introduktion til awk.\n\nAwk kan bruge mange c-lignende statements, som if-else, while, for, break,\n next og exit.\nJeg vil kun gennemg\u00c2 enkelte af dem.\n\nFor mere information:\nskriv \"man awk\"\ngoogle awk\n\n\nSimpel brug af awk-scripting direkte p\u00c2 kommandolinjen:\n\nAwk deler linjer i en fil op i enkelte dele, som kan bearbejdes.\nDenne kommando printer f\u00afrste ord af hver linje i den givne fil p\u00c2 sk\u00carmen:\nawk '{print $1}' filnavn\n\nDer s\u00cattes {} omkring awk-scriptet, og n\u00c2r det bruges direkte p\u00c2 kommandolinjen,\n s\u00cattes '' omrking scriptet. Selve scriptet er her blot print $1.\n\n\n\u2206ndre field separatoren:\nNormalt deler awk linjerne op i ord adskilt med mellemrum. Men hvis der nu\n arbejdes med en fil som f.eks. \/etc\/passwd, \u00afnskes det m\u00c2ske at dele linjerne\n op med : som separator.\nParameteren -F bruges til at \u00candre field separator. Her bruger vi : som\n separator, og f\u00c2r printet f\u00afrste \"ord\" af \/etc\/passwd (brugernavnene):\nawk -F: '{print $1}' \/etc\/passwd\n\n\nBruge awk-scriptfiler i stedet for kommandolinjen:\nFor at bede awk om at bruge en fil som et awk-script,\n gives den -f-parameteren, som:\nawk -f awkscript filderskalrodesi\n\n\n\n[-----------------------------\n[ $ cat 01_begin_end.awk ]\n\n#BEGIN og END:\n#De to kan bruges til at f\u00c2 en kommando udf\u00afrt en enkelt gang n\u00c2r scriptet\n# starter, og n\u00c2r det slutter, i forhold til resten, som bliver udf\u00afrt en gang\n# ved hver linje i filen man arbejder med.\n\nBEGIN { print \"Her begynder vi:\" }\n\n{ print $1 }\n\nEND { print \"Saa er vi faerdige!\" }\n\n\n\n[-----------------------------\n[ $ cat 02_line_numbers.awk ]\n\n#Line numbers\n#Et eksempel der s\u00catter linjenumre p\u00c2 en fil\n#Og til sidst skriver antal linjer\n\nBEGIN { linje = 0 }\n{\nprint linje,\"  \",$0;\nlinje++;\n}\nEND { print \"Antal linjer i filen\", FILENAME linje }\n\n\n[-----------------------------\n[ $ cat 03_eregging.txt ]\n\nExtended regular expressions i awk \n\nSom s\u00c2 mange andre steder, kan man bruge regexp i awk.\nHer er et eksempel der printer f\u00afrste ord af alle linjer der indeholder g\n efterfulgt af k.\n\n\/g.*k\/ { print $1 }\n\nHer f\u00c2r vi listet alle brugere, der bruger bash som shell:\nawk '\/bash\/ { print $1 }' \/etc\/passwd\n\n\n[-----------------------------\n[ $ cat 04_for.awk ]\n\n#Eksempel paa en for kontrolstruktur i awk\n\n#I dette eksempel printes ordene i omvendt r\u00cakkef\u00aflge\n\n#{\n#for ( i = NF; i>=1; i--)\n#print $i\n#}\n\n#Men hov! Det er jo ikke p\u00cant med linebreaks for hvert ord.\n#awk har en smart printf, hvor man ligesom i c, kan printe lidt mere avanceret:\n\n{\nfor ( i = NF; i>=1; i--)\nprintf \"%s \", $i;\n\nprint \"\\n\";\n}\n\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; [ $ cat 00_intro.txt ] AWKing af Lars Sommer, lasg@lasg.dk 2005-04-20 Dette er en r\u00cakke simple eksempler p\u00c2 hvad programmet awk kan bruges til. Awk kan meget, og der er skrevet hele b\u00afger om det. Jeg vil kun gennemg\u00c2 det meget overfladisk. Du kan m\u00c2ske bruge mine noter og eksempler som en lille introduktion til awk. Awk kan bruge mange c-lignende statements, som if-else, while, for, break, next og exit. Jeg vil kun gennemg\u00c2 enkelte af dem. For mere information: skriv &#8220;man awk&#8221; google awk Simpel brug af awk-scripting direkte p\u00c2 kommandolinjen: Awk deler linjer i en fil op i enkelte dele, som kan bearbejdes. Denne kommando printer f\u00afrste ord af hver linje i den givne fil p\u00c2 sk\u00carmen: awk &#8216;{print $1}&#8217; filnavn Der s\u00cattes {} omkring awk-scriptet, og n\u00c2r det bruges direkte p\u00c2 kommandolinjen, s\u00cattes &#8221; omrking scriptet. Selve scriptet er her blot print $1. \u2206ndre field separatoren: Normalt deler awk linjerne op i ord adskilt med mellemrum. Men hvis der nu arbejdes med en fil som f.eks. \/etc\/passwd, \u00afnskes det m\u00c2ske at dele linjerne op med : som separator. Parameteren -F bruges til at \u00candre field separator. Her bruger vi : som separator, og f\u00c2r printet f\u00afrste &#8220;ord&#8221; af \/etc\/passwd (brugernavnene): awk -F: &#8216;{print $1}&#8217; \/etc\/passwd Bruge awk-scriptfiler i stedet for kommandolinjen: For at bede awk om at bruge en fil som et awk-script, gives den -f-parameteren, som: awk -f awkscript filderskalrodesi [&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; [ $ cat 01_begin_end.awk ] #BEGIN og END: #De to kan bruges til at f\u00c2 en kommando udf\u00afrt en enkelt gang n\u00c2r scriptet # starter, og n\u00c2r det slutter, i forhold til resten, som bliver udf\u00afrt en gang # ved hver linje i filen man arbejder med. BEGIN { print &#8220;Her begynder vi:&#8221; } { print $1 } END { print &#8220;Saa er vi faerdige!&#8221; } [&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; [ $ cat 02_line_numbers.awk ] #Line numbers #Et eksempel der s\u00catter linjenumre p\u00c2 en fil #Og til sidst skriver antal linjer BEGIN { linje = 0 } { print linje,&#8221; &#8220;,$0; linje++; } END { print &#8220;Antal linjer i filen&#8221;, FILENAME linje } [&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; [ $ cat 03_eregging.txt ] Extended regular expressions i awk Som s\u00c2 mange andre steder, kan man bruge regexp i awk. Her er et eksempel der printer f\u00afrste ord af alle linjer der indeholder g efterfulgt af k. \/g.*k\/ { print $1 } Her f\u00c2r vi listet alle brugere, der bruger bash som shell: awk &#8216;\/bash\/ { print $1 }&#8217; \/etc\/passwd [&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; [ $ cat 04_for.awk ] #Eksempel paa en for kontrolstruktur i awk #I dette eksempel printes ordene i omvendt r\u00cakkef\u00aflge #{ #for ( i = NF; i>=1; i&#8211;) #print $i #} #Men hov! Det er jo ikke p\u00cant med linebreaks for hvert ord. #awk har en smart printf, hvor man ligesom i c, kan printe lidt mere avanceret: { for ( i = NF; i>=1; i&#8211;) printf &#8220;%s &#8220;, $i; print &#8220;\\n&#8221;; }<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,41],"tags":[24,26,44],"class_list":["post-487","post","type-post","status-publish","format-standard","hentry","category-computer","category-programmering","tag-computer","tag-linux","tag-unix"],"acf":[],"_links":{"self":[{"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/posts\/487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/comments?post=487"}],"version-history":[{"count":1,"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/posts\/487\/revisions"}],"predecessor-version":[{"id":488,"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/posts\/487\/revisions\/488"}],"wp:attachment":[{"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/media?parent=487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/categories?post=487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lasg.dk\/wp\/wp-json\/wp\/v2\/tags?post=487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}