60초마다 파일의 줄을 복사하고 마지막으로 복사한 위치부터 계속하는 방법

60초마다 파일의 줄을 복사하고 마지막으로 복사한 위치부터 계속하는 방법

60초마다 파일에서 x 줄을 복사해야 하고, 60초 후에 60초 동안 계속 복사하고 마지막 복사본에서 다시 시작해야 합니까?

#!/bin/bash
while true; do
  sed -n -e '1,10000' input.yml > output.txt 
  sleep 60 
done

감사해요

답변1

output.txt실행할 때마다 재정의 하려면 다음을 수행하세요.

#! /bin/sh -

while true; do
  head -n 10000 > output.txt
  sleep 60
done < input.yml

그렇지 않은 경우:

#! /bin/sh -

while true; do
  head -n 10000
  sleep 60
done < input.yml > output.txt

그 사본들에 따라60초마다 10,000개 행. 행이 많지 않으면 10000행이 될 때까지 기다리지 않습니다.

head출력의 목록 바이트 바로 뒤에 입력에 커서를 두는 구현을 가정합니다 . 입력 파일을 검색할 수 있는 경우(예 input.yml:정기적인문서).

각 반복에서 이러한 10000줄을 기다리려면 다음을 사용하여 (GNU 시스템에서) 수행할 수 있습니다.

tail -fn+1 input.yml |
  while true; do
    sed -u 10000q > output.txt
    sleep 60
  done

여기서 입력은 검색 불가능한 파이프입니다. 따라서 우리는 최대 10000번째 개행 문자head 까지 한 번에 1바이트를 읽을 수 있는 구현이 필요합니다 . 그래서 GNU는 이것을 할 수 있습니다 .sed-u

또 다른 방법은 다음과 같습니다.

tail -fn+1 input.yml | awk -v out=output.txt -v n=10000 '
  {print > out}
  NR % n == 0 {close(out); system("sleep 60")}'

( awk인 경우에는 mawk통과해야 합니다 -W interactive.) 이 명령은 입력을 읽는 동일한 명령에 대해 항상 동일한 호출이므로 한 번에 1바이트를 읽을 필요가 없습니다. awk이 명령을 실행할 때마다 sleep 60쉘이 실행된다는 점에 유의하십시오 .

관련 정보