나는 awk script
날짜(6번째, 7번째, 8번째 필드)를 기준으로 생성된 가장 오래되고 최신 파일을 인쇄하는 데 사용하고 있습니다.
내 샘플 목록의 날짜 형식은 (YYYY/MM/DD)입니다.
file was created 2020/10/10 20:18:42 its name is output1
file was created on 2020/09/10 12:13:22 its name is foobar.awk
file was created on 2020/10/10 20:12:43 its name is output2
file was created on 2020/12/10 18:11:38 its name is foobar.bash
file was created on 2020/12/10 22:32:13 its name is output.txt
다음과 같아야 합니다.
Oldest file date :
2020/09/10 12:13:22
file name: foobar.awk
Newest file date :
2020/12/10 22:32:13
file name: output,txt
awk
참고: "가장 오래된 파일과 최신 파일만 인쇄하고 싶습니다" 만 사용할 수 있습니다 .
또한: 파일을 정렬하지 않고 단순히 가장 오래된 파일과 최신 파일만 인쇄합니다.
답변1
GNU awk를 가정하면:
gawk '
{created[$NF] = $5 " " $6}
END {
PROCINFO["sorted_in"] = "@val_str_asc"
for (f in created) {print "oldest:", f, created[f]; break}
PROCINFO["sorted_in"] = "@val_str_desc"
for (f in created) {print "newest:", f, created[f]; break}
}
' file
인용하다:배열 순회 제어, 그리고gawk를 통해 사전 정의된 배열 스캔 순서 사용
답변2
stat
파일 및 수정 시간을 가져오는 데 사용되며 awk
출력을 정렬 및 형식화하지 않고 최소/최대를 가져옵니다.
stat -c "%Y %n" * | awk '
min == "" || min > $1 {min = $1; fmin = substr($0, index($0, FS)+1)}
max == "" || max < $1 {max = $1; fmax = substr($0, index($0, FS)+1)}
END {
form = "%Y/%m/%d %H:%M:%S"
printf "Oldest\nDate: %s\nFile: %s\n", strftime(form, min), fmin
printf "Newest\nDate: %s\nFile: %s\n", strftime(form, max), fmax
}'
예제 출력:
Oldest
Date: 2020/08/29 01:52:23
File: test.java
Newest
Date: 2020/10/12 06:52:21
File: test.sh
노트:
- 위의 코드는 줄 바꿈이 아닌 파일의 공백을 처리합니다.
- 내 생각에 awk strftime은 GNU에만 해당되는 것 같습니다.