回答編集履歴
2
コンバータについて補足
test
CHANGED
@@ -31,3 +31,27 @@
|
|
31
31
|
perl -F"," -ane '$n{$F[2]}++; END{foreach $k (sort keys %n){print "$k $n{$k}\n"}}' data.csv
|
32
32
|
|
33
33
|
```
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
# perlスクリプトファイルを作る簡便な方法
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
コメント欄にも書きましたが、こちらに補足しておきます。
|
42
|
+
|
43
|
+
まず、perlスクリプトファイルの呼び出し方。ワンライナーで対処しているうち、より複雑なことをやりたくなって結局スクリプトファイルの作成を始めるという事態はままあることです。その場合、ワンライナー部分を単純に新規ファイルにコピーし、コマンドラインのワンライナー部分をそのファイル名に置き換え、最後にコマンドラインの`-e`を消すだけです。awk では逆に`-f`をつけなければなりませんがperlは異なります。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
次に、perlのパッケージの中に標準で含まれているコンバータがあります。
|
48
|
+
|
49
|
+
awkはわかるけどperlはちょっと、という回答者氏のような方は、awkスクリプトをperlスクリプトに変換する`a2p`というコンバータを使えば、簡単にperlスクリプトファイルを得ることができます。同様に、sedスクリプトをperlスクリプトに変換する`s2p`、findコマンドと同じことをするperlスクリプトを生成する`find2perl`があります。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
私は個人的にはa2pやs2pはほとんど使いませんが、find2perlはちょくちょく使います。「ディレクトリを下までたどりながら、条件に合うファイルが見つかったらそこそこ複雑な何らかの処理を行う」という作業にはとても便利です。find2perlを覚えてしまうと、findやxargsを使ったシェル芸など、まだるっこしくて覚える気にはならないくらいです。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
参照: http://perldoc.jp/docs/perl/5.10.1/perlutil.pod
|
1
addition
test
CHANGED
@@ -5,3 +5,29 @@
|
|
5
5
|
$ perl -F"," -ane 'print "$F[2]\n"' data.csv |sort |uniq -c
|
6
6
|
|
7
7
|
```
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
カウントを取りたいだけならuniqは必要ありませんね。
|
12
|
+
|
13
|
+
```
|
14
|
+
|
15
|
+
# awk
|
16
|
+
|
17
|
+
awk -F"," '{n[$3]++}END{for(i in n){print i,n[i]}}' data.csv
|
18
|
+
|
19
|
+
# perl
|
20
|
+
|
21
|
+
perl -F"," -ane '$n{$F[2]}++; END{foreach $k (keys %n){print "$k $n{$k}\n"}}' data.csv
|
22
|
+
|
23
|
+
```
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
項目がアルファベット順に並ばないのが気持ち悪いなら
|
28
|
+
|
29
|
+
```
|
30
|
+
|
31
|
+
perl -F"," -ane '$n{$F[2]}++; END{foreach $k (sort keys %n){print "$k $n{$k}\n"}}' data.csv
|
32
|
+
|
33
|
+
```
|