xargs를 사용하여 지속적으로 출력 새로 고침

xargs를 사용하여 지속적으로 출력 새로 고침

이 함수는 다운로드한 파일의 크기와 전송 속도를 줄 바꿈 문자로 구분하여 출력합니다. 예:

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

가능한 한 많은 인수를 전달하는 대신(짝수가 보장되지 않음) -n22개의 입력 단어마다 xargs하나씩 호출하면 문제가 해결되지만 프로세스를 분기하고 두 줄마다 프로세스를 로드, 초기화, 실행, 정리하는 것을 의미합니다. 1회 실행 가능합니다.printfprintf

텍스트를 처리하려면 텍스트 처리 유틸리티를 사용하는 것이 가장 좋습니다.

여기서는 짝수 sed또는 이면 충분합니다.awk

output_data_func | sed 's/^/Data transferred : /; n; s/^/Speed : /'
output_data_func | awk '
  {getline speed; print "Data transferred : "$0"\nSpeed : "speed}'

관련 정보