나는 파일의 레코드 수(줄 수)와 디렉터리에 있는 파일 이름을 output.txt 파일에 저장하는 Bash 스크립트를 작성했습니다.
출력 .txt 파일은 다음과 같습니다.
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
원하는 결과
출력.txt
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
TOTAL :
1714083 UnixfileName
295169219 NextUnixFileName
노트:
파일 이름이 UnixFileName과 유사한 경우 No.ofRecord를 합산합니다.
파일 이름이 NextUnixFileName과 유사하면 No.ofRecord가 합산됩니다.
미리 감사드립니다.
답변1
$ awk 'NR > 1 { k = substr($2, 4); cnt[k] += $1 } { print } END { print "\nTOTAL:"; for (k in cnt) print cnt[k], k }' file
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
TOTAL:
1714083 UnixfileName.txt
295169219 NextUnixFileName.txt
스크립트 는 네 번째 문자에서 시작하는 awk
키를 기반으로 첫 번째 열을 k
두 번째 열로 합산합니다. 이는 첫 번째 줄(헤더)을 제외한 파일의 모든 입력 줄에서 수행됩니다. 모든 입력 라인은 수정되지 않은 채 출력으로 전달됩니다.
마지막으로, 발견된 각 키의 총 개수를 인쇄합니다.
합계의 열 너비를 나머지 데이터와 동일하게 만들려면 마지막 열을 print cnt[k], k
다음 형식으로 변경할 수 있습니다.
printf("%-15d%s\n", cnt[k], k)
숫자를 왼쪽 정렬된 15자 너비의 정수로 형식화합니다.