awkユーザーのためのPerlワンライナー
awk(と他のコマンド)ユーザーがPerlワンライナーを覚えるとうれしいこと↓↓
awk '{print $1, $2}'
perl -waln -e 'print $F[0], $F[1]'
awk 'BEGIN{sum=0};{sum+=1};END{print sum}' file.txt
perl -wln -e 'BEGIN{my $sum=0}{$sum+=1}END{print $sum}' file.txt
perlオプション
オプション | 意味 |
---|---|
-e | スクリプトをコマンドラインで実行 |
-w | 警告 |
-n | 暗黙のループ |
-p | 自動print |
-l | 行末処理 |
-a | 入力レコードを配列@Fへ分割 |
-F | INPUTセパレータを指定 |
特殊変数(awkとの比較)
perl | awk | 意味 |
---|---|---|
$_ | $0 | 最後に読み込んだレコード |
$. | NR | レコード番号 |
$#F | NF | フィールド数 |
$/ | RS | INPUTレコードセパレータ |
$\ | ORS | OUTPUTレコードセパレータ |
$ARGV[0] | FILENAME | ファイル名 |
$, | OFS | OUTPUTフィールドセパレータ |
そのほか
# $_にhogeが含まれる perl -waln -e 'if(/hoge/) {print $_}' file.txt # $_にhogeが含まれない perl -waln -e 'if(!/hoge/) {print $_}' file.txt # $F[0]にhogeが含まれる perl -waln -e 'if($F[0] =~ /hoge/) {print $_}' file.txt # $F[0]にhogeが含まれない perl -waln -e 'if($F[0] !~ /hoge/) {print $_}' file.txt # hogeをfooに置換 perl -waln -e '$_ =~ s/hoge/foo/; print $_' file.txt