답변1
ls
나는 시스템 명령을 사용하여 파일을 나열하고 stat
그에 대한 정보를 얻는 스크립트를 awk에 작성했습니다 . 그러면 스크립트는 파일 번호와 크기를 바이트 단위로 인쇄합니다.
#!/usr/bin/awk -f
BEGIN {
dir = "/home/matej" #chnage default directory
if(ARGC == 2){ #check for command line arguments
dir = ARGV[1]
}
printf("Listing directory: %s\n", dir)
cmd = "ls " dir
m_names[1] = "January"
m_names[2] = "February"
m_names[3] = "March"
m_names[4] = "April"
m_names[5] = "May"
m_names[6] = "June"
m_names[7] = "July"
m_names[8] = "August"
m_names[9] = "September"
m_names[10] = "October"
m_names[11] = "November"
m_names[12] = "December"
while((cmd | getline filename) > 0 ){
"stat --printf=\"%Y %s\" \"" dir "/" filename "\"" | getline info #use %W instead of %Y if your system supports date of birth
#FS = " "
split(info, arr, " ")
time = arr[1]
size = arr[2]
month = strftime("%m", time) + 0 #+ 0 is for converting string to int and removein first 0
months[month] = months[month] + 1
sizes[month] = sizes[month] + size
}
close(cmd)
#pretty print
printf("%-11s %-20.18s %s\n", "Month", "Number of files", "Total size of files (in bytes)")
for(a = 1; a <= 12; a ++){
printf("%-9s: %-20s %s\n", m_names[a], months[a], sizes[a])
}
}
이 스크립트에서 두 가지를 수정합니다.
dir = "/home/matej/"
기본 디렉터리 변경"stat --printf=\"%Y %s\" \"" dir filename "\"" | getline info
시스템이 출생 시간을 지원하는 경우 %Y 대신 %W를 사용하세요.
스크립트를 실행합니다:
chmod +x script.awk
./script.awk
또는 논쟁./script.awk /home/user
내 시스템의 출력은 다음과 같습니다.
Listing directory: /home/matej
month number of files total size of files
January : 7 163860
February : 1 4096
March : 1 4096
April : 1 764
May : 1 4096
June : 3 12288
July : 2 13142852623
August : 2 8192
September: 1 16
October : 8 10975459334
November : 4 44067
December : 10 49152