Say I have a data file that I want to process; I want to take the maximum value of each of the column and append it to the end of each line.
T1 T2 T3
35.82 34.67 31.68
32.20 34.52 33.59
37.41 38.64 37.56
T1 T2 T3
35.82 34.67 31.68 35.82
32.20 34.52 33.59 34.52
37.41 38.64 37.56 38.64
I'm trying to implement this as a one-liner. So far, this is what I've come up with, although it complains that &main::max
is undefined:
perl -MList::Util -ani.bak -e "print qq(@F).q( ).max(@F).qq(\n)" file1.txt
It seems that I haven't loaded the List::Util
module. What's wrong? And is the header column an issue?
perlrun doesn't have a decent example on how to do this (actually it does, my documentation was a little hard to read).
You loaded List::Util
, but the module doesn't export symbols by default. Skip the header line by checking whether $.
is 1.
$ perl -MList::Util=max -ape 's/$/" " . max(@F)/e unless $.==1' input T1 T2 T3 35.82 34.67 31.68 35.82 32.20 34.52 33.59 34.52 37.41 38.64 37.56 38.64
The perlrun documentation explains:
A little builtin syntactic sugar means you can also say -mmodule=foo,bar or -Mmodule=foo,bar as a shortcut for
-Mmodule qw(foo bar)
. This avoids the need to use quotes when importing symbols. The actual code generated by -Mmodule=foo,bar isuse module split(/,/,q{foo,bar})
. Note that the=
form removes the distinction between -m and -M.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With