|
|
1.1 root 1: /*
2: * comm -- see which lines two sorted files have in common
3: * Tom Duff 80.08.08 (how symmetrical)
4: */
5:
6: #include <stdio.h>
7:
8: #define LLEN 512 /* maximum line length */
9:
10: int col1 = 1;
11: int col2 = 1;
12: int col3 = 1;
13: char line1[LLEN];
14: char line2[LLEN];
15: FILE *fd1, *fd2;
16:
17: main(argc, argv)
18: char *argv[];
19: {
20: register int s;
21:
22: if (argc < 2)
23: usage();
24: if (argv[1][0]=='-' && argv[1][1]!='\0') {
25: while (argv[1][1]) {
26: switch (argv[1][1]) {
27: case '1':
28: col1 = 0;
29: break;
30:
31: case '2':
32: col2 = 0;
33: break;
34:
35: case '3':
36: col3 = 0;
37: break;
38:
39: default:
40: usage();
41: }
42: ++argv[1];
43: }
44: --argc;
45: argv++;
46: }
47: if (argc != 3)
48: usage();
49: if (strcmp(argv[1], "-") == 0)
50: fd1 = stdin;
51: else if ((fd1 = fopen(argv[1], "r")) == NULL){
52: fprintf(stderr, "comm: can't open %s\n", argv[1]);
53: exit(1);
54: }
55: if (strcmp(argv[2], "-") == 0)
56: fd2 = stdin;
57: else if ((fd2 = fopen(argv[2], "r")) == NULL){
58: fprintf(stderr, "comm: can't open %s\n", argv[2]);
59: exit(1);
60: }
61: fgets(line1, LLEN, fd1);
62: fgets(line2, LLEN, fd2);
63: while (!feof(fd1) && !feof(fd2))
64: if ((s = strcmp(line1, line2)) < 0)
65: print1();
66: else if (s > 0)
67: print2();
68: else
69: print3();
70: while (!feof(fd1))
71: print1();
72: while (!feof(fd2))
73: print2();
74: exit(0);
75: }
76:
77: print1()
78: {
79: if (col1)
80: printf("%s", line1);
81: fgets(line1, LLEN, fd1);
82: }
83:
84: print2()
85: {
86: if (col2){
87: if (col1)
88: putchar('\t');
89: printf("%s", line2);
90: }
91: fgets(line2, LLEN, fd2);
92: }
93:
94: print3()
95: {
96: if (col3){
97: if (col1)
98: putchar('\t');
99: if (col2)
100: putchar('\t');
101: printf("%s", line1);
102: }
103: fgets(line1, LLEN, fd1);
104: fgets(line2, LLEN, fd2);
105: }
106:
107: usage()
108: {
109: fprintf(stderr, "Usage: comm [-[123]] file1 file2\n");
110: exit(1);
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.