존재하다놀다그리고 xargs
아래와 같이
nicholas@gondor:~/x$
nicholas@gondor:~/x$ xargs echo < list.txt
1 2 3
nicholas@gondor:~/x$
nicholas@gondor:~/x$ cat list.txt
1
2
3
nicholas@gondor:~/x$
xargs
다음 출력을 어떻게 제공할 수 있습니까 ?
number is 1
number is 2
number is 3
그리고 현재 결과에 대한 숫자만이 아닌가요?
echo와 함께 기호를 사용해 보았지만 $
올바른 출력을 얻지 못했습니다.
또한 시도했습니다:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ printf '%s\n' "${list.txt[@]}" | xargs
bash: ${list.txt[@]}: bad substitution
nicholas@gondor:~/x$
그러나 이것은 분명히 파일을 올바르게 읽지 못합니다.
너무 당황스럽지 않다면 echo
계속 사용하는 것이 좋습니다 .printf
또 다른 시도:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ xargs echo 'numbers are ${}' < list.txt
numbers are ${} 1 2 3
nicholas@gondor:~/x$
그러나 위의 각 숫자를 별도의 줄에 배치하는 방법을 잘 모르겠습니다.
또한보십시오:
답변1
$ xargs printf 'Number is %d\n' <file
Number is 1
Number is 2
Number is 3
이는 파일에서 단어를 읽고 한 번에 가능한 한 많은 단어로 지정된 유틸리티를 호출합니다. 유틸리티 printf
는 각 매개변수 세트에 대해 형식 문자열을 재사용합니다.
위의 내용은 결국 실행됩니다.
printf 'Number is %d\n' 1 2 3
파일의 줄에 공백이나 탭이 있는 경우:
$ cat file
1 2
3 4
5 6
$ xargs printf 'Number is %s\n' <file
Number is 1
Number is 2
Number is 3
Number is 4
Number is 5
Number is 6
위는 파일에서 공백으로 구분된 모든 단어를 사용하여 유틸리티를 실행한 결과입니다 printf
.
printf 'Number is %s\n' 1 2 3 4 5 6
$ xargs -I {} printf 'Number is %s\n' {} <file
Number is 1 2
Number is 3 4
Number is 5 6
위의 코드는 printf
세 번 실행되며, 매번 파일과 별도의 줄에서 실행됩니다. 유틸리티 인수 목록의 각 인수는 {}
파일에서 읽은 행으로 대체됩니다.
파일에 다음이 포함된 경우인용된 문자열:
'1 2'
'3 4'
'5 6'
그 다음에:
$ xargs printf 'Number is %s\n' <file
Number is 1 2
Number is 3 4
Number is 5 6
위의 내용은 해당 항목을 실행한 결과입니다.
printf 'Number is %s\n' '1 2' '3 4' '5 6'