특정 줄부터 파일 쓰기 시작

특정 줄부터 파일 쓰기 시작

다음과 같은 파일이 있습니다.

**********************************
Some notes are here
Year Month Day Hour Minute Second
. . . . . . . . . . . . . . . . .

이 아래에서 다음 코드를 사용하여 날짜를 표시하고 싶습니다.

#!/bin/bash
for  timestamp in (1262300400..1264978800..600)
do
date -d @"$timestamp" '+%Y %m %d %H %M %S';
done | grep -Ev '[15]0 00$' > file.txt

이 코드를 어떻게 얻었는지 알고 싶다면 질문을 읽어보세요.기간(분) 이 질문의 어려움은 마지막 부분에 있습니다 "> file.txt". 현재 코드는 file.txt의 기존 콘텐츠를 덮어씁니다. 나는 이 루프가 "file.txt" 파일의 주석 아래에 날짜를 인쇄하여 5행이나 다른 곳에서 쓰기를 시작할 수 있기를 원합니다.

따라서 원하는 출력은 다음과 같습니다.

**********************************
Some notes are here
Year Month Day Hour Minute Second
. . . . . . . . . . . . . . . . .
2010 01 01 00 00 00
2010 01 01 00 20 00
2010 01 01 00 30 00
2010 01 01 00 40 00
2010 01 01 01 00 00 

답변1

리디렉션 사용은 >리디렉션하는 출력 파일을 생성하거나, 이미 존재하는 경우 크기를 0으로 자릅니다. 파일에 대한 모든 쓰기는 파일 시작 부분부터 시작되며 데이터는 순차적으로 기록됩니다. 이것은아니요지금 뭐하고 지내?

사용을 리디렉션하면 >>출력 파일이 생성되거나 이미 존재하는 경우아니요잘라냅니다. 파일에 대한 모든 쓰기는 파일 끝에서 발생합니다. 이것이 당신이 원하는 것입니다.

또한 코드에 구문 오류가 있습니다. 루프 내에서 중괄호 확장을 사용하고 싶다고 가정합니다.

#!/bin/bash
for  timestamp in {1262300400..1264978800..600}; do
    date -d @"$timestamp" '+%Y %m %d %H %M %S'
done | grep -v '[15]0 00$' >>file.txt

또한 이것은극도로date엄청난 횟수(정확히 말하면 4465회, 한 달을 31일로 하는 10분 기간의 횟수) 라고 부르는 느린 루프입니다 . 작업 속도를 높이려면 dateGNU가 파일에서 읽을 수 있다는 사실을 활용하세요 (여기서는 표준 입력에 타임스탬프를 제공하며 dateread 를 사용합니다 -f -).

#!/bin/bash
printf '@%s\n' {1262300400..1264978800..600} |
date -f - '+%Y %m %d %H %M %S' |
grep -v '[15]0 00$' >>file.txt

이 작업은 1초 이내에 실행됩니다.

-Egrep또한 확장 정규 표현식을 사용하지 않기 때문에 통화에서 제외되었습니다 .

관련 정보