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

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

私は現在、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

おすすめ記事