http://www.perlmonks.org?node_id=1077092


in reply to Printing columns to a single file

I am having difficulty understanding what you have written. It would be easier if you included sample input and output, wrapped in code tags, as described in How do I post a question effectively?.

Is there a reason you are committed to using a one-liner instead of a more traditional multi-line script? That could give you a great deal of control in how you cycle over your files (opendir, readdir) and how they are formatted. As well, since you are dealing with CSV, it might make sense to use Text::CSV in case there is escaping. My general rule is I only use a one-liner when I'm doing a quick task once - by posting a question, it feels like you no longer meet the quick criterion.

If you need to know what file name you are dealing with in a -n context, it's stored in $ARGV. So maybe you want something closer to

perl -F"\t" -lane '$, = ","; print $ARGV, $F[21], $F[3]' *.gcount > Af +1gcount.csv

Update: Fixed broken link. Thanks NaN.


#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Replies are listed 'Best First'.
Re^2: Printing columns to a single file
by anisha3 (Novice) on Mar 05, 2014 at 16:06 UTC

    I have files like file 1,file 2,file 2 etc like in hundreds...It has data in columns so I would like to extract 0 and 4 column from every file then print it in to a single .txt or .csv file... the code i used it was useful to extract the desired columns and print it in seperate single files then again i have to generate a code and complie them...i am asking that if theres any posibility to include every thing in single code as am not much familiar with this sort of thing...I hope you understand

      Note that you did not follow any of the advice I listed above. You did not show a sample of input. You did not show a sample of output. You did not explain why you are using a one-liner. You did not say why the provided code modification didn't do what you needed. Why are you making it hard for me to help you?
      I have files like file 1,file 2,file 2 etc like in hundreds...
      You can use opendir and readdir to cycle over, as I said previously, or use glob if you are so inclined. -n uses <> to read files (see I/O Operators), so it will implicitly cycle over the argument list - thus *.gcount will be expanded by the shell into a full file list and get cycled over.
      It has data in columns so I would like to extract 0 and 4 column from every file
      So why aren't you using Text::CSV to read it?
      i am asking that if theres any posibility to include every thing in single code
      A great deal is possible. That doesn't make it a good idea. After all this time and effort, a simple script would have been written and done already. That certainly could be considered a "single code". Why are you hung up on one-liners?

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.