回答編集履歴

2

コンバータについて補足

2018/06/28 04:28

投稿

KojiDoi
KojiDoi

スコア13671

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

2018/06/28 04:28

投稿

KojiDoi
KojiDoi

スコア13671

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
+ ```