Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a Perl substitute for the cut and paste shell commands?

Tags:

perl

cut

paste

I saw once a quick and dirty Perl implementation for the cut and paste linux commands. It was something like perl 'print "$F1"' filename to substitute a cut -f1 filename command

Can someone tell me how was this Perl way? Specifically, I'm interested because this, unlike cut/paste, will work the same also in Windows environments.

like image 863
Tonio Avatar asked Jan 24 '23 00:01

Tonio


2 Answers

Do you know about the Perl Power Tools? They are implementations of your favorite unix commands, but done in Perl. If you have Perl, you can have your favorite commands without acrobatics on the command line. PPT has both cut and paste.

Although many people pointed you to some perl switches, they forget to link to perlrun which explains them all.

like image 80
brian d foy Avatar answered Jan 29 '23 16:01

brian d foy


cut

perl -alpe'$_=$F[0]'
perl -alpe'$_="@F[1..3]"'

To give a custom input separator,

perl -F: -alpe'$_=$F[0]'

To change the output separator,

perl -F: -alpe'$"=":";$_="@F[1..3]"'

To grep while you're at it,

perl -alne'print$F[0]if/blah/'

paste

Not quite as easy.

#!/usr/bin/perl
for (@ARGV ? @ARGV : qw(-)) {
    if ($_ eq '-') {push @files, *STDIN}
    else {open $files[@files], '<', $_}
}
while (grep defined, (@lines = map scalar <$_>, @files)) {
    chomp @lines;
    print join("\t", @lines), "\n";
}
like image 45
ephemient Avatar answered Jan 29 '23 15:01

ephemient