コマンドラインで複数のコマンドを順次実行するには?

コマンドラインで複数のコマンドを順次実行するには?

複数のコマンドをコマンドラインに貼り付け、各行を順番に実行して結果を出力したいと思います。

入力内容を貼り付けます。

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 -xgrep

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

おすすめ記事