⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 awkcode.txt

📁 c programming pearls answer
💻 TXT
📖 第 1 页 / 共 5 页
字号:
ny2.awk /New York/smith.awk BEGIN         { RS = ""; FS = "\n" }smith.awk $1 ~ /Smith$/ { print $1, $4 }   # name, phonemsort.sh # pipeline to sort address list by last namesmsort.sh msort.sh awk 'msort.sh BEGIN { RS = ""; FS = "\n" }msort.sh       { printf("%s!!#", x[split($1, x, " ")])msort.sh         for (i = 1; i <= NF; i++)msort.sh             printf("%s%s", $i, i < NF ? "!!#" : "\n")msort.sh       }msort.sh ' |msort.sh sort |msort.sh awk 'msort.sh BEGIN { FS = "!!#" }msort.sh       { for (i = 2; i <= NF; i++)msort.sh             printf("%s\n", $i)msort.sh         printf("\n")msort.sh       }msort.sh 'addr.2 accountantaddr.2 Adam Smithaddr.2 1234 Wall St., Apt. 5Caddr.2 New York, NY 10021addr.2 addr.2 doctor - ophthalmologistaddr.2 Dr. Will Seymouraddr.2 798 Maple Blvd.addr.2 Berkeley Heights, NJ 07922addr.2 addr.2 lawyeraddr.2 David W. Copperfieldaddr.2 221 Dickens Laneaddr.2 Monterey, CA 93940addr.2 addr.2 doctor - pediatricianaddr.2 Dr. Susan Markaddr.2 600 Mountain Avenueaddr.2 Murray Hill, NJ 07974doctors1.awk /^doctor/, /^$/doctors2.awk /^doctor/ { p = 1; next }doctors2.awk p == 1doctors2.awk /^$/      { p = 0; next }checks.data check	1021checks.data to	Champagne Unlimitedchecks.data amount	123.10checks.data date	1/1/87checks.data checks.data depositchecks.data amount	500.00checks.data date	1/1/87checks.data checks.data check	1022checks.data date	1/2/87checks.data amount	45.10checks.data to	Getwell Drug Storechecks.data tax	medicalchecks.data checks.data check	1023checks.data amount	125.00checks.data to	International Travelchecks.data date	1/3/87checks.data checks.data amount	50.00checks.data to	Carnegie Hallchecks.data date	1/3/87checks.data check	1024checks.data tax	charitable contributionchecks.data checks.data to	American Expresschecks.data check	1025checks.data amount	75.75checks.data date	1/5/87check1 # check1 - print total deposits and checkscheck1 check1 /^check/   { ck = 1; next }check1 /^deposit/ { dep = 1; next }check1 /^amount/  { amt = $2; next }check1 /^$/       { addup() }check1 check1 END        { addup()check1              printf("deposits $%.2f, checks $%.2f\n",check1                  deposits, checks)check1            }check1 check1 function addup() {check1     if (ck)check1         checks += amtcheck1     else if (dep)check1         deposits += amtcheck1     ck = dep = amt = 0check1 }check2 # check2 - print total deposits and checkscheck2 check2 BEGIN           { RS = ""; FS = "\n" }check2 /(^|\n)deposit/ { deposits += field("amount"); next }check2 /(^|\n)check/   { checks += field("amount"); next }check2 END             { printf("deposits $%.2f, checks $%.2f\n",check2                       deposits, checks)check2                 }check2 check2 function field(name,   i,f) {check2     for (i = 1; i <= NF; i++) {check2         split($i, f, "\t")check2         if (f[1] == name)check2             return f[2]check2     }check2     printf("error: no field %s in record\n%s\n", name, $0)check2 }check3 # check3 - print check informationcheck3 check3 BEGIN { RS = ""; FS = "\n" }check3 /(^|\n)check/ {check3     for (i = 1; i <= NF; i++) {check3         split($i, f, "\t")check3         val[f[1]] = f[2]check3     }check3     printf("%8s %5d %8s  %s\n",check3         val["date"],check3         val["check"],check3         sprintf("$%.2f", val["amount"]),check3         val["to"])check3     for (i in val)check3         delete val[i]check3 }prep1 # prep1 - prepare countries by continent and pop. den.prep1 prep1 BEGIN { FS = "\t" }prep1       { printf("%s:%s:%d:%d:%.1f\n",prep1             $4, $1, $3, $2, 1000*$3/$2) | "sort -t: +0 -1 +4rn"prep1       }form1 # form1 - format countries data by continent, pop. den.form1 form1 BEGIN { FS = ":"form1         printf("%-15s %-10s %10s %7s %12s\n",form1             "CONTINENT", "COUNTRY", "POPULATION",form1             "AREA", "POP. DEN.")form1       }form1       { printf("%-15s %-10s %7d %10d %10.1f\n",form1             $1, $2, $3, $4, $5)form1       }prep2 # prep2 - prepare countries by continent, inverse pop. den.prep2 prep2 BEGIN { FS = "\t"}prep2       { den = 1000*$3/$2prep2         printf("%-15s:%12.8f:%s:%d:%d:%.1f\n",prep2             $4, 1/den, $1, $3, $2, den) | "sort"prep2       }form2 # form2 - format countries by continent, pop. den.form2 form2 BEGIN { FS = ":"form2         printf("%-15s %-10s %10s %7s %12s\n",form2             "CONTINENT", "COUNTRY", "POPULATION",form2             "AREA", "POP. DEN.")form2       }form2       { if ($1 != prev) {form2             print ""form2             prev = $1form2         } elseform2             $1 = ""form2         printf("%-15s %-10s %7d %10d %10.1f\n",form2             $1, $2, $3, $4, $5)form2       }prep3 # prep3 - prepare countries data for form3prep3 prep3 BEGIN  { FS = "\t" }prep3 pass == 1 {prep3     area[$4] += $2prep3     areatot += $2prep3     pop[$4] += $3prep3     poptot += $3prep3 }prep3 pass == 2 {prep3     den = 1000*$3/$2prep3     printf("%s:%s:%s:%f:%d:%f:%f:%d:%d\n",prep3         $4, $1, $3, 100*$3/poptot, $2, 100*$2/areatot,prep3         den, pop[$4], area[$4]) | "sort -t: +0 -1 +6rn"prep3 }form3 # form3 - format countries report number 3form3 form3 BEGIN  {form3     FS = ":"; date = "January 1, 1988"form3     hfmt = "%36s %8s %12s %7s %12s\n"form3     tfmt = "%33s %10s %10s %9s\n"form3     TOTfmt = "   TOTAL for %-13s%7d%11.1f%11d%10.1f\n" form3     printf("%-18s %-40s %19s\n\n", "Report No. 3",form3       "POPULATION, AREA, POPULATION DENSITY", date)form3     printf(" %-14s %-14s %-23s %-14s %-11s\n\n",form3       "CONTINENT", "COUNTRY", "POPULATION", "AREA", "POP. DEN.")form3     printf(hfmt, "Millions ", "Pct. of", "Thousands ",form3                  "Pct. of", "People per")form3     printf(hfmt, "of People", "Total ", "of Sq. Mi.",form3                  "Total ", "Sq. Mi. ")form3     printf(hfmt, "---------", "-------", "----------",form3                  "-------", "----------")form3 }form3 {   if ($1 != prev) { # new continentform3         if (NR > 1)form3             totalprint()form3         prev = $1     # first entry for continentform3         poptot = $8;  poppct = $4form3         areatot = $9; areapct = $6form3     } else {          # next entry for continentform3         $1 = ""form3         poppct += $4; areapct += $6form3     }form3     printf(" %-15s%-10s %6d %10.1f %10d %9.1f %10.1f\n",form3         $1, $2, $3, $4, $5, $6, $7)form3     gpop += $3;  gpoppct += $4form3     garea += $5; gareapct += $6form3 }form3 form3 END {form3     totalprint()form3     printf(" GRAND TOTAL %20d %10.1f %10d %9.1f\n",form3         gpop, gpoppct, garea, gareapct)form3     printf(tfmt, "=====", "======", "=====", "======")form3 }form3 form3 function totalprint() {	# print totals for previous continentform3     printf(tfmt, "----", "-----", "-----", "-----")form3     printf(TOTfmt, prev, poptot, poppct, areatot, areapct)form3     printf(tfmt, "====", "=====", "=====", "=====")form3 }form4 # form4 - format countries data for tbl inputform4 form4 BEGIN  {form4     FS = ":"; OFS = "\t"; date = "January 1, 1988"form4     print ".TS\ncenter;"form4     print "l c s s s r s\nl\nl l c s c s c\nl l c c c c c."form4     printf("%s\t%s\t%s\n\n", "Report No. 3",form4         "POPULATION, AREA, POPULATION DENSITY", date)form4     print "CONTINENT", "COUNTRY", "POPULATION",form4           "AREA", "POP. DEN."form4     print "", "", "Millions", "Pct. of", "Thousands",form4           "Pct. of", "People per"form4     print "", "", "of People", "Total", "of Sq. Mi.",form4           "Total", "Sq. Mi."form4     print "\t\t_\t_\t_\t_\t_"form4     print ".T&\nl l n n n n n."form4 }form4 form4 {    if ($1 != prev) {  # new continentform4         if (NR > 1)form4             totalprint()form4         prev = $1form4         poptot = $8;  poppct = $4form4         areatot = $9; areapct = $6form4     } else {            # next entry for current continentform4         $1 = ""form4         poppct += $4; areapct += $6form4     }form4     printf("%s\t%s\t%d\t%.1f\t%d\t%.1f\t%.1f\n",form4         $1, $2, $3, $4, $5, $6, $7)form4     gpop += $3;  gpoppct += $4form4     garea += $5; gareapct += $6form4 }form4 form4 END {form4     totalprint()form4     print ".T&\nl s n n n n n."form4     printf("GRAND TOTAL\t%d\t%.1f\t%d\t%.1f\n",form4         gpop, gpoppct, garea, gareapct)form4     print "", "=", "=", "=", "=", "="form4     print ".TE"form4 }form4 form4 function totalprint() {    # print totals for previous continentform4     print ".T&\nl s n n n n n."form4     print "", "_", "_", "_", "_", "_"form4     printf("   TOTAL for %s\t%d\t%.1f\t%d\t%.1f\n",form4         prev, poptot, poppct, areatot, areapct)form4     print "", "=", "=", "=", "=", "="form4     print ".T&\nl l n n n n n."form4 }table # table - simple table formattertable table BEGIN {table     FS = "\t"; blanks = sprintf("%100s", " ")table     number = "^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$"table }table table {   row[NR] = $0table     for (i = 1; i <= NF; i++) {table         if ($i ~ number)table             nwid[i] = max(nwid[i], length($i))table         wid[i] = max(wid[i], length($i))table     }table }table table END {table     for (r = 1; r <= NR; r++) {table         n = split(row[r], d)table         for (i = 1; i <= n; i++) {table             sep = (i < n) ? "   " : "\n"table             if (d[i] ~ number)table                 printf("%" wid[i] "s%s", numjust(i,d[i]), sep)table             elsetable                 printf("%-" wid[i] "s%s", d[i], sep)table         }table     }table }table table function max(x, y) { return (x > y) ? x : y }table table function numjust(n, s) {   # position s in field ntable     return s substr(blanks, 1, int((wid[n]-nwid[n])/2))table }table1 # table1 - single column formattertable1 #   input:  one column of strings and decimal numberstable1 #   output: aligned columntable1 table1 BEGIN {table1     blanks = sprintf("%100s", " ")table1     number = "^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$"table1     left = "^[+-]?[0-9]*"table1     right = "[.][0-9]*"table1 }table1 table1 {   row[NR] = $1table1     if ($1 ~ number) {table1         match($1, left) # matches the empty string, so RLENGTH>=0table1         lwid = max(lwid, RLENGTH)table1         if (!match($1, right))table1             RLENGTH = 0table1         rwid = max(rwid, RLENGTH)table1         wid = max(wid, lwid + rwid)table1     } elsetable1         wid = max(wid, length($1))table1 }table1 table1 END {table1     for (r = 1; r <= NR; r++) {table1         if (row[r] ~ number)table1             printf("%" wid "s\n", numjust(row[r]))table1         elsetable1             printf("%-" wid "s\n", row[r])table1     }table1 }table1 table1 function max(x, y) { return (x > y) ? x : y }table1 table1 function numjust(s) {   # position stable1     if (!match(s, right))table1         RLENGTH = 0table1     return s substr(blanks, 1, int(rwid-RLENGTH+(wid-(lwid+rwid))/2))table1 }info0 awk 'info0 BEGIN { FS = "\t" }info0 $1 ~ /Canada/ {info0     printf("%s:\n", $1)info0     printf("\t%d million people\n", $3)info0     printf("\t%.3f million sq. mi.\n", $2/1000)info0     printf("\t%.1f people per sq. mi.\n", 1000*$3/$2)info0 }info0 ' countriesinfo awk 'info # info - print information about countryinfo #    usage: info country-nameinfo info BEGIN { FS = "\t" }info $1 ~ /'$1'/ {info     printf("%s:\n", $1)info     printf("\t%d million people\n", $3)info     printf("\t%.3f million sq. mi.\n", $2/1000)info     printf("\t%.1f people per sq. mi.\n", 1000*$3/$2)info }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -