Memoize

BasicWerk   EC Support   Technique   Facebook  

20141130115939_Perl_oneliner_switch

Perl_oneliner_switch

 

 

sample.txt
 
1 aaa
2 bbb
3 ccc
 

 

sample.csv
 
1,aaa
2,bbb
3,ccc
 

 

Perl One-Liner

 
# ファイルを読み込まない=Perl code のみで完結する場合
# 出力に自動的に改行を付けない(Default)
% perl -w -e 'print 23 * 8;' 
184%
 
# 入力を chomp する + 出力(print)に自動で改行を付ける -l
% perl -wl -e 'print 23 * 8;'
184
 
# 入力を処理(自動出力はしない) -n
% perl -wnl -e 'print' sample.txt
1 aaa
2 bbb
3 ccc
 
% sed '/^3/d' sample.txt | perl -wnl -e 'm/a+/ and print'
1 aaa
 
# フィールド処理(デフォルトは空白文字でセパレート) -a
# 環境変数 @F にアクセス
% perl -wnla -e 'print $F[1]' sample.txt
aaa
bbb
ccc
 
# セパレート文字を指定 -F
% perl -wnlaF, -e 'print $F[1]' sample.csv
aaa
bbb
ccc
 
# print もオプションで on -p
% perl -wnlp -e 's/,/\t/' sample.csv
1	aaa
2	bbb
3	ccc
 
# -e 'code' の部分は別ファイルに置き換えられる
% cat sample_script.pl 
s/,/\t/;
s/^(\d+)/$1:/;
 
% perl -wnlp sample_script.pl sample.csv
1:	aaa
2:	bbb
3:	ccc
 
# ファイルバックアップ & 上書き -isuffix
% cp sample.csv sample.csv.original
% perl -i.bak -wnlp sample_script.pl sample.csv
% ls sample.csv*
sample.csv		sample.csv.bak		sample.csv.original
% cat sample.csv
1:	aaa
2:	bbb
3:	ccc
% cat sample.csv.bak
1,aaa
2,bbb
3,ccc
 
# モジュールを使う -M'Module_name'
% perl -M'LWP::Simple qw/get/' -wnl -e 'print get($_)' <<<'http://basicwerk.com/'
<!DOCTYPE html>
<html>
    <HEAD>
    ...
    ...
</html>
 

 

sample_para.txt
 
今日の予定:
ローゼンに買い物行く
昼寝
 
明日の予定:
歯医者行く
昼寝
 

 

 
# パラグラフ単位で処理 -00
% perl -00 -wnl -e 'print "$.\. $_"' sample_para.txt
1. 今日の予定:
ローゼンに買い物行く
昼寝
 
2. 明日の予定:
歯医者行く
昼寝
 
# ファイル単位で処理 -0777
% perl -0777 -wnl -e 'print "#File#$.\n$_"' sample.txt sample.csv     
#File#1
1 aaa
2 bbb
3 ccc
#File#2
1,aaa
2,bbb
3,ccc
 

 

 
# スイッチクラスタ -s
% cat switch_sample.pl
#! /usr/bin/perl -s -wn
# -n, -t オプションを有効にする
our ($n, $t);
# -m='message' オプションを有効にする
our ($m);
 
# -n が on だったら行番号を出力
print "$.:" if $n;
# -t が on だったら TAB を出力
print "\t" if $t;
# 本体を出力
print "$_";
 
# -m にメッセージが設定されていたら
# 最後に出力
END {
    print "$m\n" if $m;
}
 
# オプション無し(単なる cat)
% switch_sample.pl sample_para.txt
今日の予定:
ローゼンに買い物行く
昼寝
 
明日の予定:
歯医者行く
昼寝
 
# -n
% switch_sample.pl -n sample_para.txt
1:今日の予定:
2:ローゼンに買い物行く
3:昼寝
4:
5:明日の予定:
6:歯医者行く
7:昼寝
 
# -n -t
% switch_sample.pl -n -t sample_para.txt
1:	今日の予定:
2:	ローゼンに買い物行く
3:	昼寝
4:	
5:	明日の予定:
6:	歯医者行く
7:	昼寝
 
# -n -t -m='...'
% switch_sample.pl -n -t -m='EOT' sample_para.txt
1:	今日の予定:
2:	ローゼンに買い物行く
3:	昼寝
4:	
5:	明日の予定:
6:	歯医者行く
7:	昼寝
EOT
 

 

参考:

 

 


© Shin Nakamura/BasicWerk 2014