다음 형식으로 무제한 줄을 출력하는 명령이 있습니다.
$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"