(use posix srfi-13) (define file "test-file2") (define index "index") (define (get-byte-offset line) (car (string-split line ":" #t))) (define (make-index file) (call-with-values (lambda () (process (string-append "grep -b '' " file))) (lambda (in-port _ _) (let ((index-fileno (file-open index (+ open/wronly open/creat)))) (let loop ((line (read-line in-port))) (unless (eof-object? line) (file-write index-fileno (string-append (string-pad (get-byte-offset line) 16) "\n")) (loop (read-line in-port)))))))) (make-index file))