複数のコマンドをコマンドラインに貼り付け、各行を順番に実行して結果を出力したいと思います。
入力内容を貼り付けます。
cat type_of_record.txt | grep 'type_of_record_new creating' | wc -l
cat type_of_record.txt | grep 'type_of_record_modification found 1' | wc -l
cat type_of_record.txt | grep 'type_of_record_modification found 0' | wc -l
cat type_of_record.txt | grep 'type_of_record_inactivation found 1' | wc -l
出力を取得します。
469005
9999
5099
25
しかし、代わりに、各コマンドが各改行文字の後に実行されるようにします。出力次のようになります。
cat type_of_record.txt | grep 'type_of_record_modification found 1' | wc -l
469005
cat type_of_record.txt | grep 'type_of_record_modification found 0' | wc -l
9999
cat type_of_record.txt | grep 'type_of_record_inactivation found 1' | wc -l
5099
これが可能かどうかはわかりませんが、各結果を元の行に再マップする必要がない場合は、時間がかかります。
ベストアンサー1
コマンドをコピーして端末エミュレータに貼り付けるのは簡単ではありません。ここでの問題は、端末(テキスト入力と表示を処理する)がシェル(プロンプトを印刷してコマンドラインを処理する)とは異なるプロセスであり、端末は実際にユーザーが入力したテキストが何であるかを知ることができないことです。スーダン。生地。したがって、前のコマンドが完了するのを待つか、シェルが再びプロンプトを表示するのを待つことはできません。
あなたができることは、シェルが実行されたときにコマンドを印刷するか、この特別な場合にsを実行するショートシェルループを書くことset -v
です。set -x
grep
for pattern in 'type_of_record_new creating' \
'type_of_record_modification found 1' \
'type_of_record_modification found 0' \
'type_of_record_inactivation found 1'
do
printf "%s:\n%10d" "$pattern"
grep -c -e "$pattern" type_of_record.txt
done
これは次のような出力を提供します
type_of_record_new creating: 469005
type_of_record_modification found 1: 9999
もちろん、正確な形式は変更できます。数値を別々の行に右揃えで表示するには、コマンド置換とprintf %d
行番号を使用できます。
for pattern in ...
do
printf "%s:\n%8d\n" "$pattern" "$(grep -c -e "$pattern" type_of_record.txt)"
done