4
2
I have several huge CSV files in which I want to swap two column names.
I do not want to modify/copy/rewrite the data.
The operation is very cheap in C
: fopen
the file, fgets
the header, fseek
or rewind
, manipulate the header (preserving its length), fputs
the new header, fclose
the file.
This can also be done in ANSI Common Lisp
(CLISP, SBCL or GCL):
(with-open-file (csv "foo.csv" :direction :io
:if-exists :overwrite)
(let ((header (read-line csv)))
(print header)
(file-position csv 0)
(write-line (string-upcase header) csv)
(file-position csv 0)
(read-line csv)))
and takes a fraction of a second (sed
takes a few minutes because it reads and re-writes the whole file even it you tell it to modify just the first line, ignoring the crucial information that the size of the header did not change).
How do I do that with the "standard unix tools" (e.g., perl
)?
Nice, I never knew about notrunc. But note that ./do-some-processing must preserve the length of the header (as specified by the OP.) Just a warning for tl;dr folks (like me :) – Owen – 2015-05-08T19:41:14.230