파이프를 통해 여러 매개변수 전달

파이프를 통해 여러 매개변수 전달

다음 형식으로 무제한 줄을 출력하는 명령이 있습니다.

$cmd1
word1 text with spaces and so on
word2 another text with spaces and so on

word첫 번째 줄이 하나의 매개변수에 전달되고 나머지 텍스트가 다른 매개변수에 전달되도록 각 줄을 다른 명령에 전달하고 싶습니다 . 이와 같이:

$cmd2 --argword=word1 --argtext="text with spaces and so on"
$cmd2 --argword=word2 --argtext="another text with spaces and so on"

답변1

마지막 줄에 개행 문자가 있고(그렇지 않으면 줄이 손실됨) cmd2합리적인 값으로 설정되었다고 가정하면, shim을 함께 엮은 쉘 코드는 다음과 같을 것입니다.

#!/bin/sh
IFS=" "
while read word andtherest; do
    $cmd2 --argword="$word" --argtext="$andtherest"
done

나머지 필드는 모두 andtherest각 동작 에 집중되어야 하기 때문입니다 read.

답변2

awk를 시도해보세요:

/usr/bin/awk -f
{
    cmd=$1;
    gsub($1 " +", "")
    printf("%s --argword=%s --argtext=\"%s\"\n", cmd2, cmd, $0)
}

이 출력은 awk 변수를 이름으로 허용합니다.지침 2.

다음과 같이 테스트할 수 있습니다.

$ echo "word1 text with spaces and so on" | 
  awk -v cmd2=foo '{ cmd=$1; gsub($1 " +", ""); printf("%s --argword=%s --argtext=\"%s\"\n", cmd2, cmd, $0) }'
foo --argword=word1 --argtext="text with spaces and so on"

관련 정보