파일 이름의 첫 번째 부분이 다음 줄과 동일하면 레코드 수를 추가하십시오.

파일 이름의 첫 번째 부분이 다음 줄과 동일하면 레코드 수를 추가하십시오.

파일 이름과 레코드 개수가 포함된 텍스트 파일이 있습니다. 파일 이름의 첫 번째 부분이 동일하면 레코드 개수를 추가하고 싶습니다.

개수.txt:

aa_20201123.csv 1000 
bb_20201123.csv 1500
bb_20201124.csv 2500 

출력은 다음과 같아야 합니다.

aa*.csv 1000 
bb*.csv 4000

답변1

그리고 awk:

awk -F'[_ ]' '
    { sum_records[$1"*.csv"] +=$NF; };
END { for (x in sum_records) print x, sum_records[x]; }' infile

필드 구분 기호를 밑줄과 공백으로 정의한 다음 동일한 첫 번째 필드 각각에 대해 레코드 수를 합산하여 END { ... }블록에 인쇄합니다.

산출:

bb*.csv 4000
aa*.csv 1000

위의 파일 이름 접미사는 우리가 하드코딩한 것이지만 .csv 이상의 파일 이름이 있는 경우 다음과 같이 변경할 수 있습니다.

awk -F'[_ .]' '
    { sum_records[$1 "*." $3]+=$NF; };
END { for (x in seen) print x, seen[x]; }' infile

또한 필드 구분 기호 목록에 점을 추가했으며 하드코딩된 항목 .대신 사용되었습니다 .$3"csv"

다음 입력의 경우:

aa_20201123.csv 1000
bb_20201123.csv 1500
bb_20201123.txt 1234
bb_20201124.csv 2500

그러면 다음과 같은 출력이 제공됩니다.

bb*.csv 4000
aa*.csv 1000
bb*.txt 1234

관련 정보