📄 awkcode.txt
字号:
# unbundle - unpack a bundle into separate files$1 != prev { close(prev); prev = $1 } { print substr($0, index($0, " ") + 1) >$1 }emp.data Beth 4.00 0emp.data Dan 3.75 0emp.data Kathy 4.00 10emp.data Mark 5.00 20emp.data Mary 5.50 22emp.data Susie 4.25 1805.awk { print $1, $3 }28.awk { print NF, $1, $NF }06.awk { print $1, $2 * $3 }07.awk { print NR, $0 }10.awk { print "total pay for", $1, "is", $2 * $3 }11.awk { printf("total pay for %s is $%.2f\n", $1, $2 * $3) }11a.awk { printf("%-8s $%6.2f\n", $1, $2 * $3) }08.sh awk '{ printf("%6.2f %s\n", $2 * $3, $0) }' emp.data | sort12.awk $2 >= 513.awk $2 * $3 > 50 { printf("$%.2f for %s\n", $2 * $3, $1) }14.awk $1 == "Susie"15.awk /Susie/20.awk $2 >= 4 || $3 >= 2021.awk $2 >= 421.awk $3 >= 2022.awk !($2 < 4 && $3 < 20)26.awk NF != 3 { print $0, "number of fields is not equal to 3" }26.awk $2 < 3.35 { print $0, "rate is below minimum wage" }26.awk $2 > 10 { print $0, "rate exceeds $10 per hour" }26.awk $3 < 0 { print $0, "negative hours worked" }26.awk $3 > 60 { print $0, "too many hours worked" }30.awk BEGIN { print "NAME RATE HOURS"; print "" }30.awk { print }31.awk $3 > 15 { emp = emp + 1 }31.awk END { print emp, "employees worked more than 15 hours" }31a.awk END { print NR, "employees" }32.awk { pay = pay + $2 * $3 }32.awk END { print NR, "employees"32.awk print "total pay is", pay32.awk print "average pay is", pay/NR32.awk }33.awk $2 > maxrate { maxrate = $2; maxemp = $1 }33.awk END { print "highest hourly rate:", maxrate, "for", maxemp }34.awk { names = names $1 " " }34.awk END { print names }33a.awk { last = $0 }33a.awk END { print last }40.awk { print $1, length($1) }40a.awk { nc = nc + length($0) + 140a.awk nw = nw + NF40a.awk }40a.awk END { print NR, "lines,", nw, "words,", nc, "characters" }41.awk $2 > 6 { n = n + 1; pay = pay + $2 * $3 }41.awk END { if (n > 0)41.awk print n, "employees, total pay is", pay,41.awk "average pay is", pay/n41.awk else41.awk print "no employees are paid more than $6/hour"41.awk }interest1.awk # interest1 - compute compound interestinterest1.awk # input: amount rate yearsinterest1.awk # output: compounded value at the end of each yearinterest1.awk interest1.awk { i = 1interest1.awk while (i <= $3) {interest1.awk printf("\t%.2f\n", $1 * (1 + $2) ^ i)interest1.awk i = i + 1interest1.awk }interest1.awk }forint.awk # interest2 - compute compound interestforint.awk # input: amount rate yearsforint.awk # output: compounded value at the end of each yearforint.awk forint.awk { for (i = 1; i <= $3; i = i + 1)forint.awk printf("\t%.2f\n", $1 * (1 + $2) ^ i)forint.awk }50.awk # reverse - print input in reverse order by line50.awk 50.awk { line[NR] = $0 } # remember each input line50.awk 50.awk END { i = NR # print lines in reverse order50.awk while (i > 0) {50.awk print line[i]50.awk i = i - 150.awk }50.awk }51.awk # reverse - print input in reverse order by line51.awk 51.awk { line[NR] = $0 } # remember each input line51.awk 51.awk END { for (i = NR; i > 0; i = i - 1)51.awk print line[i]51.awk }61.awk END { print NR }62.awk NR == 1066.awk { print $NF }63.awk { field = $NF}63.awk END { print field }64.awk NF > 465.awk $NF > 467.awk { nf = nf + NF }67.awk END { print nf }68.awk /Beth/ { nlines = nlines + 1 }68.awk END { print nlines }69.awk $1 > max { max = $1; maxline = $0 }69.awk END { print max, maxline }70.awk NF > 071.awk length($0) > 8072.awk { print NF, $0 }73.awk { print $2, $1 }74.awk { temp = $1; $1 = $2; $2 = temp; print }75.awk { $1 = NR; print }76.awk { $2 = ""; print }77.awk { for (i = NF; i > 0; i = i - 1) printf("%s ", $i)77.awk printf("\n")77.awk }78.awk { sum = 078.awk for (i = 1; i <= NF; i = i + 1) sum = sum + $i78.awk print sum78.awk }79.awk { for (i = 1; i <= NF; i = i + 1) sum = sum + $i }79.awk END { print sum }80.awk { for (i = 1; i <= NF; i = i + 1) if ($i < 0) $i = -$i80.awk print80.awk }countries USSR 8649 275 Asiacountries Canada 3852 25 North Americacountries China 3705 1032 Asiacountries USA 3615 237 North Americacountries Brazil 3286 134 South Americacountries India 1267 746 Asiacountries Mexico 762 78 North Americacountries France 211 55 Europecountries Japan 144 120 Asiacountries Germany 96 61 Europecountries England 94 56 Europep11.awk # print countries with column headers and totalsp11.awk p11.awk BEGIN { FS = "\t" # make tab the field separatorp11.awk printf("%10s %6s %5s %s\n\n",p11.awk "COUNTRY", "AREA", "POP", "CONTINENT")p11.awk }p11.awk { printf("%10s %6d %5d %s\n", $1, $2, $3, $4)p11.awk area = area + $2p11.awk pop = pop + $3p11.awk }p11.awk END { printf("\n%10s %6d %5d\n", "TOTAL", area, pop) }p12.awk $0 >= "M"p13.awk $1 < $4p13a.awk /Asia/re1.awk /^[0-9]+$/re2.awk /^[0-9][0-9][0-9]$/re3.awk /^(\+|-)?[0-9]+\.?[0-9]*$/re4.awk /^[+-]?[0-9]+[.]?[0-9]*$/re5.awk /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$/re6.awk /^[A-Za-z][A-Za-z0-9]*$/re7.awk /^[A-Za-z]$|^[A-Za-z][0-9]$/re8.awk /^[A-Za-z][0-9]?$/p16.awk $2 !~ /^[0-9]+$/p18.awk $4 == "Asia" && $3 > 500p19.awk $4 == "Asia" || $4 == "Europe"p20.awk $4 ~ /^(Asia|Europe)$/p20a.awk /Asia/ || /Europe/p20b.awk /Asia|Europe/p21.awk /Europe/, /Africa/p22.awk FNR == 1, FNR == 5 { print FILENAME ": " $0 }p22a.awk FNR <= 5 { print FILENAME ": " $0 }p23.awk $4 == "Asia" { print $1, 1000 * $2 }p41.awk { $2 = $2 / 1000; print }p42.awk BEGIN { FS = OFS = "\t" }p42.awk $4 == "North America" { $4 = "NA" }p42.awk $4 == "South America" { $4 = "SA" }p42.awk { print }p43.awk BEGIN { FS = OFS = "\t" }p43.awk { $5 = 1000 * $3 / $2; print }p43a.awk { print ($1 != 0 ? 1/$1 : "$1 is zero, line " NR) }p32.awk $4 == "Asia" { pop = pop + $3; n = n + 1 }p32.awk END { print "Total population of the", n,p32.awk "Asian countries is", pop, "million."p32.awk }p34.awk $3 > maxpop { maxpop = $3; country = $1 }p34.awk END { print "country with largest population:",p34.awk country, maxpopp34.awk }p24.awk { $2 /= 1000; print }p35.awk { print NR ":" $0 }p17.awk BEGIN { digits = "^[0-9]+$" }p17.awk $2 ~ digitsbuiltup.awk BEGIN {builtup.awk sign = "[+-]?"builtup.awk decimal = "[0-9]+[.]?[0-9]*"builtup.awk fraction = "[.][0-9]+"builtup.awk exponent = "([eE]" sign "[0-9]+)?"builtup.awk number = "^" sign "(" decimal "|" fraction ")" exponent "$"builtup.awk }builtup.awk $0 ~ numberp36.awk { gsub(/USA/, "United States"); print }p39.awk { $1 = substr($1, 1, 3); print $0 }p40.awk { s = s substr($1, 1, 3) " " }p40.awk END { print s }p40a.awk BEGIN { print "1E2"+0, "12E"+0, "E12"+0, "1X2Y3"+0 }p40b.awk BEGIN { print 1E2 "", 12E-2 "", E12 "", 1.23456789 "" }p45.awk { i = 1p45.awk while (i <= NF) {p45.awk print $ip45.awk i++p45.awk }p45.awk }p46.awk { for (i = 1; i <= NF; i++)p46.awk print $ip46.awk }empty.awk BEGIN { FS = "\t" }empty.awk { for (i = 1; i <= NF && $i != ""; i++)empty.awk ;empty.awk if (i <= NF)empty.awk printempty.awk }revline.awk { x[NR] = $0 }revline.awk END { for (i = NR; i > 0; i--) print x[i] }p47.awk /Asia/ { pop["Asia"] += $3 }p47.awk /Europe/ { pop["Europe"] += $3 }p47.awk END { print "Asian population is",p47.awk pop["Asia"], "million."p47.awk print "European population is",p47.awk pop["Europe"], "million."p47.awk }p48.awk BEGIN { FS = "\t" }p48.awk { pop[$4] += $3 }p48.awk END { for (name in pop)p48.awk print name, pop[name]p48.awk }p51.awk function max(m, n) {p51.awk return m > n ? m : np51.awk }p51a.awk { print max($1,max($2,$3)) } # print maximum of $1, $2, $3p51a.awk p51a.awk function max(m, n) {p51a.awk return m > n ? m : np51a.awk }p52.awk BEGIN { OFS = ":"; ORS = "\n\n" }p52.awk { print $1, $2 }p53.awk $3 > 100 { print $1, $3 >"bigpop" }p53.awk $3 <= 100 { print $1, $3 >"smallpop" }p53a.awk { print($1, $3) > ($3 > 100 ? "bigpop" : "smallpop") }p53b.awk { print > $1 }p54.awk # print continents and populations, sorted by populationp54.awk p54.awk BEGIN { FS = "\t" }p54.awk { pop[$4] += $3 }p54.awk END { for (c in pop)p54.awk printf("%15s\t%6d\n", c, pop[c]) | "sort -t'\t' +1rn"p54.awk }p60.awk # include - replace #include "f" by contents of file fp60.awk p60.awk /^#include/ {p60.awk gsub(/"/, "", $2)p60.awk while (getline x <$2 > 0)p60.awk print xp60.awk nextp60.awk }p60.awk { print }p61.awk # echo - print command-line argumentsp61.awk p61.awk BEGIN {p61.awk for (i = 1; i < ARGC; i++)p61.awk printf "%s ", ARGV[i]p61.awk printf "\n"p61.awk }p44.awk # seq - print sequences of integersp44.awk # input: arguments q, p q, or p q r; q >= p; r > 0p44.awk # output: integers 1 to q, p to q, or p to q in steps of rp44.awk p44.awk BEGIN {p44.awk if (ARGC == 2)p44.awk for (i = 1; i <= ARGV[1]; i++)p44.awk print ip44.awk else if (ARGC == 3)p44.awk for (i = ARGV[1]; i <= ARGV[2]; i++)p44.awk print ip44.awk else if (ARGC == 4)p44.awk for (i = ARGV[1]; i <= ARGV[2]; i += ARGV[3])p44.awk print ip44.awk }p62.awk $1 == "#include" { gsub(/"/, "", $2); system("cat " $2); next }p62.awk { print }field.awk # field - print named fields of each input linefield.awk # usage: field n n n ... file file file ...field.awk field.awk awk 'field.awk BEGIN {field.awk for (i = 1; ARGV[i] ~ /^[0-9]+$/; i++) { # collect numbersfield.awk fld[++nf] = ARGV[i]field.awk ARGV[i] = ""field.awk }field.awk if (i >= ARGC) # no file names so force stdinfield.awk ARGV[ARGC++] = "-"field.awk }field.awk { for (i = 1; i <= nf; i++)field.awk printf("%s%s", $fld[i], i < nf ? " " : "\n")field.awk }field.awk ' $*sum1 # sum1 - print column sumssum1 # input: rows of numberssum1 # output: sum of each columnsum1 # missing entries are treated as zerossum1 sum1 { for (i = 1; i <= NF; i++)sum1 sum[i] += $isum1 if (NF > maxfld)sum1 maxfld = NFsum1 }sum1 END { for (i = 1; i <= maxfld; i++) {sum1 printf("%g", sum[i])sum1 if (i < maxfld)sum1 printf("\t")sum1 elsesum1 printf("\n")sum1 }sum1 }sum2 # sum2 - print column sumssum2 # check that each line has the same number of fieldssum2 # as line onesum2 sum2 NR==1 { nfld = NF }sum2 { for (i = 1; i <= NF; i++)sum2 sum[i] += $isum2 if (NF != nfld)sum2 print "line " NR " has " NF " entries, not " nfldsum2 }sum2 END { for (i = 1; i <= nfld; i++)sum2 printf("%g%s", sum[i], i < nfld ? "\t" : "\n")sum2 }sum3 # sum3 - print sums of numeric columnssum3 # input: rows of integers and stringssum3 # output: sums of numeric columnssum3 # assumes every line has same layoutsum3 sum3 NR==1 { nfld = NFsum3 for (i = 1; i <= NF; i++)sum3 numcol[i] = isnum($i)sum3 }sum3 sum3 { for (i = 1; i <= NF; i++)sum3 if (numcol[i])sum3 sum[i] += $isum3 }sum3 sum3 END { for (i = 1; i <= nfld; i++) {sum3 if (numcol[i])sum3 printf("%g", sum[i])sum3 elsesum3 printf("--")sum3 printf(i < nfld ? "\t" : "\n")sum3 }sum3 }sum3 sum3 function isnum(n) { return n ~ /^[+-]?[0-9]+$/ }3-4.ans { total[$1] += $2 }3-4.ans END { for (x in total) print x, total[x] | "sort" }percent # percentpercent # input: a column of nonnegative numberspercent # output: each number and its percentage of the totalpercent percent { x[NR] = $1; sum += $1 }percent percent END { if (sum != 0)percent for (i = 1; i <= NR; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -