xargs와 함께 echo 또는 printf를 사용하여 파일의 목록을 반복하는 방법은 무엇입니까?

xargs와 함께 echo 또는 printf를 사용하여 파일의 목록을 반복하는 방법은 무엇입니까?

존재하다놀다그리고 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$ 

그러나 위의 각 숫자를 별도의 줄에 배치하는 방법을 잘 모르겠습니다.

또한보십시오:

배열을 파일로 인쇄하고 배열의 각 요소를 bash의 새 줄에 넣습니다.

xargs에 목록/배열을 에코합니다.

답변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'

관련 정보