파일의 각 열에서 특정 숫자의 발생 횟수를 계산하는 방법은 무엇입니까?

파일의 각 열에서 특정 숫자의 발생 횟수를 계산하는 방법은 무엇입니까?

음수 목록이 포함된 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

  1. 첫 번째 파일을 배열로 읽어옵니다.
  2. 각 행에 대해: 각 열을 모든 숫자 배열 구성원과 비교하고 일치하는 항목마다 개수 배열 항목을 늘립니다.
  3. 모든 행이 처리된 후: 열 개수와 함께 숫자 배열의 모든 멤버를 인쇄합니다.
$ 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

관련 정보