in reply to perl one liner for csv file one field
BTW, I cannot restrain myself from commenting anytime I see cat being used like this because, long ago on usenet, Tom Christiansen wrote: "If you find yourself calling cat with just one argument, you're probably doing something silly".cat /come/and/play/with/$i | perl -ne 'print if length((split /,/) +) > 6'
Following Tom's advice, I suggest you lose the cat (and the unnecessary pipe) by replacing:
with simply:cat /come/and/play/with/$i | perl -ne 'print if length((split /,/) +) > 6'
perl -ne 'print if length((split /,/)) > 6' /come/and/play/with/$i
Update: Added content from Useless Use of Cat Award (thanks choroba):
The venerable Randal L. Schwartz hands out Useless Use of Cat Awards from time to time; you can see some recent examples in Deja News. (The subject line really says "This Week's Useless Use of Cat Award" although the postings are a lot less frequent than that nowadays). The actual award text is basically the same each time, and the ensuing discussion is usually just as uninteresting, but there are some refreshing threads there among all the flogging of this dead horse. The oldest article Deja News finds is from 1995, but it's actually a followup to an earlier article. By Internet standards, this is thus an Ancient Tradition.
Nearly all cases where you have:
you can rewrite it as:cat file | some_command and its args ...
and in some cases you can move the filename to the arglist as in:<file some_command and its args ...
some_command and its args ... file
Also mentioned at this site are:
- Useless Use of kill -9
- Useless Use of echo
- Useless Use of ls *b
- Useless Use of wc -l
- Useless Use of grep | awk and grep | sed
- Useless Use of Backticks
- Useless Use of Test
- Assorted Other Gripes: Regular expressions used for searching (not substituting) that begin or end with '.*'. Actually 'anything*' or 'anything?'. If you are willing to accept "zero repetitions" of the anything, why specify it? Awk scripts that are basically cut unless reordering of fields is needed. Case conversions in comp.unix.shell (ex. how do I change my file names from UC to LC?) using tr/sed/awk/??? when some shells have builtin case conversions. Complex schemes to basically eliminate certain chars. For example DOS lines to UNIX lines. Sure read dos2unix(1), but using sed/awk/... when "tr -d '^M'" is all that is needed. Global changes to a file using sed to create a tmp file and renaming the tmp file, when an "ed(1)" here document would do fine.
Update: See also:
- The wise coder (an excellent poem by hippo)
In Section Seekers of Perl Wisdom