
저는 여기에 처음 왔으며 동일한 이름을 가진 파일 크기를 추가하는 방법을 묻고 싶습니다. 실제로 파일 이름이 서로 다르지만 파일을 그룹화하여 얻을 수 있도록 잘라냈습니다.
여기 크기가 포함된 원본 파일이 있습니다(샘플).
Sample.txt에는 다음 데이터가 포함되어 있습니다.
- 12345 a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122 a_2.txt
이제 Sample.txt 내부의 파일 이름을 잘라 '_'(밑줄)로 시작하는 문자를 제거했습니다. 그들은 다음과 같이 됩니다:
- 12345a
- 12234b
- 32123c
- 11122a
이제 위에서 본 것과 동일한 파일 이름을 가진 모든 파일의 크기를 추가하고 싶습니다. 출력은 다음과 같아야 합니다.
- 23467a
- 12234b
- 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
$2
a
a
이름 $2
어떤 요소를 증가시킬지 알려줍니다. 이는 인덱스입니다. 그만큼크기 $1
증분 값입니다. 처음 언급한 대로 요소를 awk
초기화할 만큼 똑똑합니다 . 특정 요소는 해당 인덱스(a
0
이름)는 입력 라인의 두 번째 필드로 나타납니다. 끝에서(입력의 마지막 줄 이후) awk
알려진 모든 인덱스를 거쳐 a
값을 인쇄합니다(현재는누적 크기) 및 인덱스(이름).
답변2
다음 으로 시작하는 모든 파일의 합계를 얻으려면 a_
다음을 수행하십시오.
du -c a_* | grep total
du
모든 파일의 크기를 계산한 다음 -c
크기를 합산합니다. grep은 모든 개별 파일이 아닌 전체 파일을 추출합니다.