음수 목록이 포함된 txt 파일과 3개의 숫자 열이 포함된 csv 파일이 있습니다. csv 파일의 모든 숫자는 txt 파일에 포함되고 txt 파일에는 csv 파일에 있는 숫자만 포함됩니다.
다음은 간단한 예입니다.
cat list.txt
-14.5
-12.3
-10.1
-10.0
-9.9
-9.8
-7.3
-0.1
cat numbers.csv
-14.5,-14.5,-12.3
-14.5,-12.3,-10.1
-10.0,-9.9,-10.1
-7.3,-9.8,-10.1
-7.3,-7.3,-10.1
-0.1,-0.1,-9.8
list.txt
각 열에 각 숫자가 몇 번 나타나는지 알아야 합니다 numbers.csv
.
위의 예에서 예상되는 결과는 다음과 같습니다.
-14.5: 2,1,0
-12.3: 0,1,1
-10.1: 0,0,4
-10.0: 1,0,0
-9.9: 0,1,0
-9.8: 0,1,1
-7.3: 2,1,0
-0.1: 1,1,0
찾을 수 있는 단축키가 있나요? 저는 bash와 python의 초보자입니다.
답변1
- 첫 번째 파일을 배열로 읽어옵니다.
- 각 행에 대해: 각 열을 모든 숫자 배열 구성원과 비교하고 일치하는 항목마다 개수 배열 항목을 늘립니다.
- 모든 행이 처리된 후: 열 개수와 함께 숫자 배열의 모든 멤버를 인쇄합니다.
$ awk -F, 'NR==FNR { n[NR]=$1; count=NR; next; }; '\
'{ for(i=1;i<=count;i++) { number=n[i]; '\
' if (number==$1) c[number,1]++; '\
' if (number==$2) c[number,2]++; '\
' if (number==$3) c[number,3]++; } }; '\
'END { for(i=1;i<=count;i++) { number=n[i]; text=number ": "; '\
'for(col=1;col<4;col++) { if (c[number,col]=="") c[number,col]=0; if (col>1) text=text ","; '\
'text=text c[number,col];} print text; }; }' list.txt numbers.csv
-14.5: 2,1,0
-12.3: 0,1,1
-10.1: 0,0,4
-10.0: 1,0,0
-9.9: 0,1,0
-9.8: 0,1,1
-7.3: 2,1,0
-0.1: 1,1,0