열을 나누고 스크립트의 별도 프로그램에 표준 입력으로 값을 제출합니다.

열을 나누고 스크립트의 별도 프로그램에 표준 입력으로 값을 제출합니다.

나는 현재 C로 작성된 "삭제"와 "계산"이라는 두 개의 프로그램을 가지고 있습니다.

./remove를 호출하면 표준 입력에서 일부 데이터가 제거됩니다. ./calculate를 호출하면 stdin의 데이터와 함께 매개변수를 가져와 값을 계산하고 반환합니다.

현재 이 두 프로그램을 호출하는 스크립트를 작성 중입니다.

다음을 사용하여 스크립트를 호출합니다.

./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? 위 구성에서는 계산에 입력이 사용되지 않는다고 가정합니다.

관련 정보