파이프 작업에서 처음 N 줄의 출력 가져오기

파이프 작업에서 처음 N 줄의 출력 가져오기

다음 명령을 사용하여 대규모 프로덕션 DB를 한 호스트에서 다른 호스트로 마이그레이션하기 위해 파이프된 명령을 사용하고 있습니다.

mysqldump <someparams> | pv | mysql <someparams>

그리고 한 서버에서 다른 서버로 전달되는 SQL에서 라인 23(또는 첫 번째 X 라인이라고 가정)(파일로 저장되거나 단순히 bash 출력에 저장됨)을 추출해야 합니다.

내가 시도한 것:

  • less적어도 출력 스크롤을 보려면 출력에서 ​​연결 하지만 운이 좋지는 않습니다.

    mysqldump <someparams> | pv | mysql <someparams> | less

  • 에 대해 읽어보았 sed으나 나에게 유용하지 않음

  • head를 사용하여 파일에 쓰지만 비어 있음

mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt

내가 가진 유일한 요구 사항은 이 .sql 파일을 저장할 수 없다는 것입니다.

어떤 아이디어?

감사해요

답변1

와 함께zsh

mysqldump <someparams> |
  pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
  mysql <someparams>

bash(또는 ) 사용 zsh:

mysqldump <someparams> |
  pv |
  tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
  mysql <someparams>

(단, bash해당 프로세스를 기다리지 않으므로 스크립트에서 다음 명령을 실행할 때까지 완료된다는 sed보장은 없습니다 .)saved-lines-22-to-24.txt

sed아니면 다음과 같이 작성 해야 할 수도 있습니다 .

mysqldump <someparams> |
  pv |
  sed '22,24 w saved-lines-22-to-24.txt' |
  mysql <someparams>

이를 출력으로 사용하려면 다음을 사용하십시오 zsh.

{mysqldump <someparams> |
  pv > >(sed '22,24!d' >&3) |
  mysql <someparams>} 3>&1

또는 bash/ zsh:

{ mysqldump <someparams> |
  pv |
  tee >(sed '22,24!d' >&3)
  mysql <someparams>
} 3>&1

관련 정보