cutっぽい何か

30分プログラム、その147。cutっぽいものを作ってみよう。
cutは前につくったid:mzp:20070902:pasteの逆。こんな感じで使う。

$ paste [a-c] | cut -f 1
a
a
a
...

$ paste [a-c] | cut -f 2-3
b	c
b	c
b	c
....

使い方

Perlで作ったので、デリミタに正規表現が使える

$ ls -l ~/ | perl cut.pl --field='7-8' -delim='[\s]+'
21:28 Desktop/
20:17 Documents/
18:53 Library/
12:02 Movies/
21:52 Music/
09:01 Pictures/
2006 Public/
10:08 Sites/
09:33 Workspace/
.....

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# cut.pl -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com>
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/09/30 22:57:54
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#

use strict;
use warnings;
use Getopt::Long;

my $opt_field = 0;
my $delim = q/\t/;
GetOptions('field=s' => \$opt_field,'delim=s'=>\$delim);

my ($begin,$end);
if($opt_field =~ /(\d)-(\d)/){
    $begin = $1;
    $end = $2;
}elsif($opt_field =~ /(\d)/){
    $begin = $end = $1;
}else{
    die "bad field"
}

while(<>){
    my @fields = split /$delim/;
    print "@fields[$begin..$end]\n" if $begin < $#fields;
}