前書き
以下のようなデータについて、各行のカラムの数を数える必要があり、シェルのコマンドで実現しようとすると難儀したので PHP でスクリプトを書いた。
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, C
A, C
A, C
C, A
C, A
C, A
欲しい出力
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
0
3 A, B, C
0
0
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
0
2 A, C
2 A, C
2 A, C
2 C, A
2 C, A
2 C, A
作成した PHP スクリプト
<?php
while (true) {
$line = fgets(STDIN);
if ($line===false) {
break;
}
$line=trim($line);
if (empty($line)) {
echo sprintf('%s %s%s', "0", $line, PHP_EOL);
continue;
}
$values = explode(",", $line);
echo sprintf('%s %s%s', count($values), $line, PHP_EOL);
}
実行結果
[root@localhost ~]# cat z.sh
cat <<EOF | php a.php
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, B, C
A, C
A, C
A, C
C, A
C, A
C, A
EOF
[root@localhost ~]# sh ./z.sh
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
0
3 A, B, C
0
0
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
3 A, B, C
0
2 A, C
2 A, C
2 A, C
2 C, A
2 C, A
2 C, A