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

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

다음 명령을 사용하여 파이프라인 명령을 사용하여 한 호스트에서 다른 호스트로 대규모 프로덕션 데이터베이스를 마이그레이션하고 있습니다.

mysqldump <someparams> | pv | mysql <someparams>

한 서버에서 다른 서버로 전달된 SQL에서 23행(또는 첫 번째 X 행)을 추출해야 합니다(파일에 저장하거나 단순히 bash 출력에 저장).

내가 시도한 것:

  • 출력을 연결하면 less최소한 출력 스크롤을 볼 수 있지만 행운은 없습니다.

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

  • 그것에 대해 읽어보았지만 sed나에게는 효과가 없었습니다.

  • 파일에 쓰기 위해 헤드를 사용했지만 파일이 비어 있습니다.

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(OR 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

관련 정보