Чтение онлайн

ЖАНРЫ

UNIX — универсальная среда программирования
Шрифт:

#include <stdio.h>

#define PERMS 0644 /* RW for owner, R for group, others */

char *progname;

main(argc, argv) /* cp: copy f1 to f2 */

 int argc;

 char *argv[];

{

 char buf[BUFSIZ];

 progname = argv[0];

 if (argc != 3)

error("Usage: %s from to", progname);

 if ((f1 = open(argv[1], 0)) == -1)

error("can't open %s", argv[1]);

 if ((f2 = creat(argv[2] , PERMS)) == -1)

error("can't create %s", argv[2]);

 while ((n = read(f1, buf, BUFSIZ)) > 0)

if (write(f2, buf, n) != n)

error("write error", (char*)0);

 exit(0);

}

#include "error.c"

3.8.15

doctype

# doctype: synthesize proper command line for troff

echo -n "cat $* | "

egrep -h '^\.(EQ|TS|\[|PS|IS|PP)' $* |

sort -u | awk '

/^\.PP/ { ms++ }

/^\.EQ/ { eqn++ }

/^\.TS/ { tbl++ }

/^\.PS/ { pic++ }

/^\.IS/ { ideal++ }

/^\.\[/ { refer++ }

END {

 if (refer > 0) printf "refer | "

 if (pic > 0) printf "pic | "

 if (ideal > 0) printf "ideal | "

 if (tbl > 0) printf "tbl | "

 if (eqn > 0) printf "eqn | "

 printf "troff "

 if (ms > 0) printf "-ms"

 printf "\n"

}'

3.8.16

double

awk '

FILENAME != prevfile { # new file

 NR = 1 # reset line number

 prevfile = FILENAME

}

NF > 0 {

 if ($1 == lastword)

printf "double %s, file %s, line %d\n" ,$1,FILENAME,NR

 for (i = 2; i <= NF; i++)

if ($i == $(i-1))

printf "double %s, file %s, line %d\n" ,$i, FILENAME ,NR

 if (NF > 0)

lastword = $NF

}' $*

3.8.17

efopen.c

FILE *efopen(file, mode) /* fopen file, die if can't */

 char *file, *mode;

{

 FILE *fp, *fopen;

 extern char *progname;

 if ((fp = fopen(file, mode)) != NULL)

return fp;

 fprintf (stderr, "%s: can't open file %s mode %s\n",

progname, file, mode);

 exit(1);

}

3.8.18

error.c

error(s1, s2) /* print error message and die */

 char *s1, *s2;

{

 extern int errno, sys_nerr;

 extern char *sys_errlist[], *progname;

 if (progname)

fprintf(stderr, "%s: ", progname);

 fprintf(stderr, s1, s2);

 if (errno > 0 && errno < sys_nerr)

fprintf (stderr, " (%s)", sys_errlist[errno]);

 fprintf(stderr, "\n");

 exit(1);

}

3.8.19

field1

awk '{ print $'$1' }'

3.8.20

field2

awk "{ print \$$1 }"

3.8.21

fold

# fold: fold long lines

sed 's/\(->/ /g' $* | # convert tabs to spaces

awk '

 BEGIN {

N = 80 # folds at column 80

for (i = 1; i <= N; i++) # make a string of blanks

blanks = blanks " "

 }

 { if ((n = length($0)) <= N)

print

else {

for (i = 1; n > N; n -= N) {

printf "%s\\\n", substr($0, i ,N)

i += N;

}

printf "%s%s\n", substr(blanks, 1, N-n), substr($0, i)

}

 } '

3.8.22

frequent

cat $* |

tr -sc A-Za-z '\012' |

sort |

uniq -с |

sort -n |

tail |

5

3.8.23

frequent2

sed 's/[ \(->][ \(->]*/\

/g' $* | sort | uniq -с | sort -nr | sed 10q

3.8.24

get

# get: extract file from history

PATH=/bin:/usr/bin

VERSION=0

while test "$1" != ""

do

 case "$1" in

Поделиться с друзьями: