例えば、CSVのカラム行、つまり1行目だけ欲しければ、行番号が格納されてる変数 $. に 1 を指定してあげればその行だけ抜き出してくれます。
 
ワンライナーで書くとこんな感じ。
 

 
$ perl -wnl -e '$. == 1 and print; last;' csv_file
 

 

からくりとしては、$. == 1 の部分が true になると「and」以降に処理が流れ、行が print され、この場合はその行(1行目)以外は要らないので、last でループ処理を抜け出します。
 
指定した行だけ欲しいのに last を書き忘れると無駄に最後の行までループが止まらないので、大きいファイルを読みこませるときは注意。
 
 
ワンライナーではなくスクリプトで書くと次のようになります。
 

 
#! /usr/bin/perl
use warnings;
use strict;
 
while (<>) {
	if ($. == 1) {
		print;
		last;
	}
}
 

 
 
予め行番号が分かれば、上記を応用して、$. == n のところに行数を入れればその行だけ抜き出せます。
または、何かもっと別な条件を指定して、その条件にぶち当たったところでループを終了させるとか。
 
 
 

§1057 · Posted By · 12月 11, 2012 · Development · Tags: , · [Print]