列を分割し、スクリプトの別のプログラムに標準入力として値を送信します。

列を分割し、スクリプトの別のプログラムに標準入力として値を送信します。

私は現在、Cで書かれた「削除」と「計算」という2つのプログラムを持っています。

./remove を呼び出すと、標準入力から一部のデータが削除されます。 ./calculate を呼び出すと、stdin のデータとともにパラメータを取得し、値を計算して返します。

現在、これら2つのプログラムを呼び出すスクリプトを作成しています。

以下を使用してスクリプトを呼び出します。

./calc.sh input.txt 2 3 4 5

そのうち input.txt には以下が含まれます。

abcd:1,2:3,4
efgh:5,4:4,4
hijk:3,1:4,9

./remove プログラムを実行して戻ります。

abcd:1,2:3,4
efgh:5,4:4,4

私のスクリプトは現在次のとおりです

./remove "$1" | ./calculate "$1" "$2" "$3" "$4" < awk -F ':,' '

./removeプログラムから返された整数列から値を選択し、その値をパラメータとともに "2 3 4 5"でstdinに./calculateに行ごとに送信するようにスクリプトを変更するにはどうすればよいですか?

答え1

あなたの目標を正しく理解したら、ほぼ近いです。努力する

#!/bin/sh
filename=$1
shift
./remove "$filename" | awk -F '[:,]' '{print $2, $3, $4, $5}' | ./calculate "$@"

-F '[:,]' 各フィールド区切り記号は次のとおりです。誰でもまたは、  :次のようにフィールド区切り文字が文字列になると予想します。,awk -F ':,':,

field1:,field2:,field3

このshiftコマンドは、引数のリストから(つまり、ファイル名)を削除し、$1およびに展開します。input.txt"$@"2345

答え2

努力する

./remove $1 |  awk -F '[:,]' '{ printf "./calculate %d %d %d %d\n",$2,$3,$4,$5 }' | bash

どこ

  • awk標準出力でコマンドラインを生成します。
  • bash(または他のシェル)に提供してください。

簡単に実行してテストできます。

./remove $1 |  awk -F '[:,]' '{ printf "./calculate %d %d %d %d\n",$2,$3,$4,$5 }'

しかし、

./calculate を呼び出すと、stdin のデータとともにパラメータを取得し、値を計算して返します。

どの入力を提供する必要があるかを説明できますか./calculate?上記の構成では、計算に入力が使用されないと仮定しています。

関連情報