UNIX 쉘 스크립트에서 동일한 이름을 가진 모든 파일의 크기를 추가하는 방법

UNIX 쉘 스크립트에서 동일한 이름을 가진 모든 파일의 크기를 추가하는 방법

저는 여기에 처음 왔으며 동일한 이름을 가진 파일 크기를 추가하는 방법을 묻고 싶습니다. 실제로 파일 이름이 서로 다르지만 파일을 그룹화하여 얻을 수 있도록 잘라냈습니다.

여기 크기가 포함된 원본 파일이 있습니다(샘플).

Sample.txt에는 다음 데이터가 포함되어 있습니다.

  1. 12345 a_1.txt
  2. 12234 b_1.txt
  3. 32123 c_1.txt
  4. 11122 a_2.txt

이제 Sample.txt 내부의 파일 이름을 잘라 '_'(밑줄)로 시작하는 문자를 제거했습니다. 그들은 다음과 같이 됩니다:

  1. 12345a
  2. 12234b
  3. 32123c
  4. 11122a

이제 위에서 본 것과 동일한 파일 이름을 가진 모든 파일의 크기를 추가하고 싶습니다. 출력은 다음과 같아야 합니다.

  1. 23467a
  2. 12234b
  3. 32123c

도와주세요. 정말 고마워요. 난 지금 몇 시간 동안 여기에 갇혀 있어요

답변1

다음에 줄 번호가 없다고 가정합니다 sample.txt.

cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'

| sort -k 2마지막에 추가하셔도 좋습니다 .


EDIT1 - 요청한 설명:

cut명령은 구분 기호가 있는 모든 줄을 잘라내고 _첫 번째 부분만 저장합니다. 원본 파일로 이미 작업을 완료했습니다.

그런 다음 awk명령은 모든 줄에서 두 개의 필드를 찾습니다. 우리는 그들을 부른다크기그리고이름, 그러나 내부적으로 는 awk으로 참조합니다 . 모든 행에 대해 배열의 한 요소가 증가합니다 (이름은 임의로 선택되며 샘플의 파일 이름과 관련이 없습니다). 그만큼$1$2aa이름 $2어떤 요소를 증가시킬지 알려줍니다. 이는 인덱스입니다. 그만큼크기 $1증분 값입니다. 처음 언급한 대로 요소를 awk초기화할 만큼 똑똑합니다 . 특정 요소는 해당 인덱스(a0이름)는 입력 라인의 두 번째 필드로 나타납니다. 끝에서(입력의 마지막 줄 이후) awk알려진 모든 인덱스를 거쳐 a값을 인쇄합니다(현재는누적 크기) 및 인덱스(이름).

답변2

다음 으로 시작하는 모든 파일의 합계를 얻으려면 a_ 다음을 수행하십시오.

du -c a_*  | grep total

du모든 파일의 크기를 계산한 다음 -c크기를 합산합니다. grep은 모든 개별 파일이 아닌 전체 파일을 추출합니다.

관련 정보