コマンドラインで正常に動作するPerlワンライナーがあります。
perl -nle 'm"\w+:x:\d+:\d+:\S+:/S+:(\S+)$" and $h{$1}++; END{ print "$_: $h{$_}" foreach sort { $h{$b} <=> $h{$a} } keys %h }' /etc/textfile
これをと呼ばれるシェルファイルに入れたshell.sh
ので、次の人はコピー/貼り付けする必要がなく、実行することができます。
#!/bin/sh
perl -nle 'm"\w+:x:\d+:\d+:\S+:/S+:(\S+)$" and $h{$1}++; END{ print "$_: $h{$_}" foreach sort { $h{$b} <=> $h{$a} } keys %h }' /etc/textfile
これをコマンドラインで実行しようとしましたが、結果が得られません。出力なしで新しいプロンプトをロードするだけです。誰かが私が間違っているのを見ますか?
システム仕様は次のとおりです。
Linuxバージョン2.6.32-220.13.1.el6.x86_64
(gccバージョン4.4.6 20110731(Red Hat 4.4.6-3)(GCC)
GNU bash、バージョン4.1.2(1)-リリース(x86_64-redhat-linux-gnu)
テキストファイルの一部を次に示します。
rfink:x:140:140:rat fink:/var/lib/rfink:/sbin/nologin
edible:x:16252:10001:eric idle:/users/eidle/:/bin/bash
tsawyer:x:30855:10001:tom sawyer:/users/tsawyer/:/bin/bash
karthur:x:30886:10001:King Arthur:/users/karthur/:/bin/bash
karthur:x:30886:10001:king arthur:/users/karthur/:/bin/bash
jcash:x:30887:10001:john cash:/users/jcash/:/bin/bash
hpotter:x:30887:10001:harry potter:/users/hpotter/:/bin/bash
triddle:x:30956:10001:tom riddle:/users/triddle/:/bin/bash