Read first x lines of csv file into new outfile?

后端 未结 2 841
走了就别回头了
走了就别回头了 2021-02-05 01:18

How would one copy only the first x lines of a csv file into a new csv file via the terminal?

相关标签:
2条回答
  • 2021-02-05 01:53

    Brief

    (You'll use a linux terminal/console)

    Use head -n NUMBEROFLINES file.csv to get the first NUMBEROFLINES of lines. Write it into another file using shell redirection (>) like this:

    head -n NUMBEROFLINES file.csv > mynewfile.csv
    

    Note that this will totally recreate mynewfile.csv, if it had any content before it is now deleted forever(-ish).

    If you ever happen to want the opposite (last x lines), use tail.

    Both tools come with man and info pages (man head or info head - get used to man, though) and a --help flag (head --help actually shows me more or less the man page).

    Full example

    head -n 10 data.csv >> /tmp/first_and_last.csv # Note the ">>"
    tail -n 10 data.csv >> /tmp/first_and_last.csv # Note the ">>"
    

    This would open the file /tmp/first_and_last.csv and attach (>>, > would recreate/delete the file!) the first and the last 10 lines of data.csv at the "end" of /tmp/first_and_last.csv.

    Mac OS: According to the internet (tm) these commands are available in (Unix-based) Mac OS as well (you have to start the Terminal via Finder).

    More speaking examples

    -n is short for --lines=, so you could also use:

    tail --lines=10 data.csv >> addtothisfile.txt
    head --lines=10 data.csv >> addtothisfile.txt
    
    0 讨论(0)
  • 2021-02-05 02:01

    This might not work for you if your CSV contains "lines" containing newline seperators, e.g. in Quotes. A short PHP Script that would solve this issue, so you would get 1500 "lines"/"datasets", each possibly containing multiple "file lines"

    <?php
    $input = fopen($argv[1], "r");
    $output = fopen($argv[2], "w+");
    
    $limit = $argv[3];
    $counter = 0;
    while($counter <= $limit) {
        echo $counter;
        $line = fgetcsv($input);
        fputcsv($output, $line);
        $counter++;
    } 
    

    To execute:

    php -f scriptname.php input.csv output.csv 1500
    
    0 讨论(0)
提交回复
热议问题