Читаем UNIX — универсальная среда программирования полностью

awk "{ print \$$1 }"

<p>3.8.21 <code>fold</code></p>

# 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)

  }

 } '

<p>3.8.22 <code>frequent</code></p>

cat $* |

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

sort |

uniq -с |

sort -n |

tail |

5

<p>3.8.23 <code>frequent2</code></p>

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

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

<p>3.8.24 <code>get</code></p>

# get: extract file from history

PATH=/bin:/usr/bin

VERSION=0

while test "$1" != ""

do

 case "$1" in

 -i) INPUT=$2; shift ;;

 -o) OUTPUT=$2; shift ;;

 -[0-9]) VERSION=$1 ;;

 -*) echo "get: Unknown argument $i" 12; exit 1 ;;

 *) case "$OUTPUT" in

  "") OUTPUT=$1 ;;

  *) INPUT=$1.H ;;

  esac

 esac

 shift

done

OUTPUT=${OUTPUT?"Usage: get [-o outfile] [-i file.H] file"}

INPUT=${INPUT-$OUTPUT.H}

test -r $INPUT || { echo "get: no file $INPUT" 12; exit 1; }

trap 'rm -f /tmp/get.[ab]$$; exit 1' 1 2 15

# split into current version and editing commands

sed $INPUT -n '1,/^@@@/w /tmp/get.a'$$'

/^@@@/,$w /tmp/get.b'$$

# perform the edits

awk /tmp/get.b$$ '

 /^@@@/ { count++ }

 !/^@@@/ count 0 count = - '$VERSION'

 END { print "$d"; print "w", "'$OUTPUT'" }

' | ed - /tmp/get.a$$

rm -f /tmp/get.[ab]$$

<p>3.8.25 <code>get.с</code></p>

get(fd, pos, buf, n) /* read n bytes from position pos */

 int fd, n;

 long pos;

 char *buf;

{

 if (lseek(fd, pos, 0) == -1) /* get to pos */

  return -1;

 return read(fd, buf, n);

}

<p>3.8.26 <code>getname</code></p>

who am i | sed 's/ .*//'

<p>3.8.27 <code>idiff.c</code></p>

/* idiff: interactive diff */

#include stdio.h

#include ctype.h

char *progname;

#define HUGE 10000 /* large number of lines */

main(argc, argv)

 int argc;

 char *argv[];

{

 FILE *fin, *fout, *f1, *f2, *efopen;

 char buf[BUFSIZ], *mktemp;

 char *diffout = "idiff.XXXXXX";

 progname = argv[0];

 if (argc != 3) {

  fprintf(stderr, "Usage: idiff file1 file2\n");

  exit(1);

 }

 f1 = efopen(argv[1], "r");

 f2 = efopen(argv[2], "r");

 fout = efopen("idiff.out", "w");

 mktemp(diffout);

 sprintf(buf, "diff %s %s %s", argv[1], argv[2], diffout);

 system(buf);

 fin = efopen(diffout, "r");

 idiff(f1, f2, fin, fout); unlink(diffout);

 printf("%s output in file idiff.out\n", progname);

 exit(0);

}

idiff(f1, f2, fin, fout) /* process diffs */

 FILE *f1, *f2, *fin, *fout;

{

 char *tempfile = "idiff.XXXXXX";

 char buf[BUFSIZ], buf2[BUFSIZ], *mktemp;

 FILE *ft, *efopen;

 int cmd, n, from1, to1, from2, to2, nf1, nf2;

 mktemp(tempfile);

 nf1 = nf2 = 0;

 while (fgets(buf, sizeof buf, fin) != NULL) {

  parse(buf, from1, to1, cmd, from2, to2);

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT