2009/12/30 Marco Mariani <marco.mariani@xxxxxxxxxxxx>:
> grep -E "^.{71}M" <in >out.m
> grep -E "^.{71}F" <in >out.f
Troppo facile, perchè non scrivere un bel filtro C come ai vecchi tempi:
terminale nero, caratteri verdi, emacs, gcc e un po' di prurito alle mani:
(p.s.: lo avevo omesso, ma le righe sono lunghe al massimo 226 caratteri)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_LEN 255
int main(int argc, char *argv[]) {
FILE *rfile,*wfile;
char buffer[BUFFER_LEN];
char *fileSource, *fileTarget, *postfisso;
char marker;
int column;
if (argc!=4) {
printf("Uso:\n\t %s marker colonna filesorgente\n",argv[0]);
return 1;
}
marker = argv[1][0];
column = atoi(argv[2]);
fileSource = strdup(argv[3]);
postfisso = (char *) malloc(4*sizeof(char));
fileTarget = (char *)
malloc((sizeof(fileSource)+sizeof(postfisso))*sizeof(char));
strcpy(fileTarget,fileSource);
postfisso[0]='_';
postfisso[1]='_';
postfisso[2]=marker;
postfisso[3]='\0';
strcat(fileTarget,postfisso);
/* DEBUG
printf("File sorgente: %s\n",fileSource);
printf("File destinazione: %s\n",fileTarget);
printf("marker: %c\ncolonna: %i\n", marker,column);
*/
rfile = fopen(fileSource,"r");
wfile = fopen(fileTarget,"w");
if (rfile == NULL ){
printf("Errore apertura file %s.\n",fileSource);
return -1;
}
if (wfile == NULL ){
printf("Errore apertura file %s.\n",fileTarget);
return -1;
}
// fgets() restituisce un puntatore nullo alla fine del file.
while ( fgets(buffer,BUFFER_LEN,rfile) ) {
if(buffer[column] == marker){
fputs(buffer,wfile);
}
}
printf("Controlla il file %s\n",fileTarget);
fclose(rfile);
fclose(wfile);
free(fileSource);
free(fileTarget);
free(postfisso);
return 0;
--
Michele Mordenti
http://michelemordenti.netsons.org
|