
다음과 같은 파일이 있습니다.
**********************************
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' 파일의 메모 아래에 날짜를 인쇄하기를 원합니다. 그래서 그것이 쓰기 시작하려면 다섯 번째 줄이나 뭐라 말할 수 있습니다.
따라서 원하는 출력은 다음과 같습니다.
**********************************
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분 시간 세그먼트의 수)를 호출합니다. 작업 속도를 높이려면 GNU가 date
파일에서 읽을 수 있다는 사실을 활용하세요(여기서는 를 date
사용하여 읽는 표준 입력에 타임스탬프를 제공합니다 -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초 이내에 실행됩니다.
또한 확장 정규식을 사용하지 않으므로 -E
호출에서 를 제거했습니다 .grep