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