이 함수는 다운로드한 파일의 크기와 전송 속도를 줄 바꿈 문자로 구분하여 출력합니다. 예:
20 #<< data
3.0M #<< speed
25
1.2M
이제 문제는 다음과 같습니다.
output_data_func | xargs printf "Data transferred : %s\nSpeed : %s"
이 명령은 데이터를 성공적으로 배치하는 데 효과적이지만 문제는 모든 데이터가 마지막에 출력된다는 것입니다. 함수가 다음 값을 출력하는 동안 계속되기를 원합니다.
나도 그것을 시도했지만 stdbuf -o0 xargs printf ...
전혀 성공하지 못했습니다.
echo를 사용해 보았지만 올바른 위치로 가져올 수 없습니다.
두 가지 가능한 해결책이 예상됩니다. 누구나
- 계속해서 인쇄하려면 printf를 사용하세요.또는
- 올바르게 배치되고 에코됨
답변1
가능한 한 많은 인수를 전달하는 대신(짝수가 보장되지 않음) -n2
2개의 입력 단어마다 xargs
하나씩 호출하면 문제가 해결되지만 프로세스를 분기하고 두 줄마다 프로세스를 로드, 초기화, 실행, 정리하는 것을 의미합니다. 1회 실행 가능합니다.printf
printf
텍스트를 처리하려면 텍스트 처리 유틸리티를 사용하는 것이 가장 좋습니다.
여기서는 짝수 sed
또는 이면 충분합니다.awk
output_data_func | sed 's/^/Data transferred : /; n; s/^/Speed : /'
output_data_func | awk '
{getline speed; print "Data transferred : "$0"\nSpeed : "speed}'