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