나는 현재 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
"$@"
2
3
4
5
답변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
? 위 구성에서는 계산에 입력이 사용되지 않는다고 가정합니다.