나는 많은 파일을 가지고 있는데, 각각은 많은 배열(아래의 입력 1과 2와 같은)을 포함하고 있습니다. 각 배열의 두 번째 행에는 두 개의 요소 번호가 있습니다. 두 번째 행의 첫 번째와 두 번째 열에 대해 가장 큰 숫자를 선택한 다음 첫 번째 행의 두 번째 숫자를 인쇄하려면 논리적 기준을 사용해야 합니다.
예를 들어 아래 표시된 파일 입력 1에서 가장 큰 숫자는 10.8(두 번째 행, 첫 번째 열)이므로 6.1703(배열의 첫 번째 행에 있는 숫자)을 인쇄합니다. 다른 가장 큰 숫자는 10.1261(두 번째 행의 두 번째 열)이므로 6.1932(이 배열의 첫 번째 행에 있는 숫자)를 인쇄하겠습니다.
그래서 이런 식으로 많은 배열을 출력해야 합니다. 여기서는 두 개의 파일과 하나의 출력만 제시합니다.
입력 파일 1
1: 6.1703
10.8 2.6
2: 6.1932
7.01640 10.1261
3: 6.5664
6.356 8.1
4: 8.0923
1.41 7.6
입력 파일 2
1: 7.2703
3.8 8.6
2: 7.6892
4.7 7.6576
3: 7.85874
16.356 5.1
4: 9.8348
4.1 3.6
산출
6.1703 6.1932
7.85874 7.2703
답변1
GNU awk를 사용하면 특수 배열을 사용하여 배열을 정렬하는 방법을 정의할 수 있습니다 PROCINFO
. 이렇게 하면 문제가 단순화될 수 있습니다.
awk 'BEGIN{RS='\n\n'}{a[$3]=$2; b[$4]=$2} \
END{PROCINFO["sorted_in"]="@ind_num_asc"; \
for(i in a) x=a[i]; for(i in b) y=b[i]; print x,y}' file1
산출:
6.1703 6.1932
모든 파일에 대해 이 명령을 실행하려면 셸의 모든 파일을 반복하거나 이 awk
조각을 다시 정렬하면 됩니다.