Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: perl one liner for csv file one field

by eyepopslikeamosquito (Archbishop)
on Jan 17, 2015 at 05:33 UTC ( [id://1113575]=note: print w/replies, xml ) Need Help??


in reply to perl one liner for csv file one field

Here is an example input file test.txt:

D,642,0642,UBF,EVL,,M,,S,S,FOREVER,213,213, D,642,0642,UBF,EVL,,M,,S,S,QSP-U=C,4,4, D,642,0642,UBF,EVL,,M,,S,S,123456,4,4, D,642,0642,UBF,EVL,,M,,S,S,12345,4,4,
where the fields are separated by a comma. For example, FOREVER above is the eleventh field. This is just a guess based on your description. Please correct me if this is wrong.

Given the above assumption, the following one-liner:

perl -nlaF/,/ -e 'length($F[10]) < 7 and print' test.txt
prints to stdout:
D,642,0642,UBF,EVL,,M,,S,S,123456,4,4, D,642,0642,UBF,EVL,,M,,S,S,12345,4,4,
i.e. prints out only those lines where the eleventh field is less than seven characters in length.

See perlrun for details of the -a and -F command line switches to perl.

Once you are happy that works and meets the spec. you could add the -i switch to auto-edit the file.

Replies are listed 'Best First'.
Re^2: perl one liner for csv file one field
by morgon (Priest) on Jan 18, 2015 at 04:58 UTC
    the following one-liner:

    perl -nlaF/,/ -e 'length($F[10]) < 7 and print' test.csv

    Is parsing csv with a split not a crime in the same category as parsing html with regexes?

    After all the fields might contain escaped delimiters...

    Here another attempt using Text::CSV_XS that processes the file line-by-line (Tux's solution slurps with my not be good for very large files):

    perl -MText::CSV_XS=csv -ne 'print if length(csv(in => \$_)->[0]->[10]) > 6'

      The new filter option filters on read, so large files are no problem. I like your approach, but it will FAIL on lines with embedded newlines, as the next csv iteration will not continue from the previous.


      Enjoy, Have FUN! H.Merijn

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1113575]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (4)
As of 2024-04-25 14:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found