sed, sort, tail을 사용하여 파일의 n 간격마다 열의 최소값을 찾는 방법은 무엇입니까?

sed, sort, tail을 사용하여 파일의 n 간격마다 열의 최소값을 찾는 방법은 무엇입니까?

파일의 12개 간격마다 파일의 5번째 열의 최소값을 찾아 해당 행을 새 파일에 저장하고 싶습니다.

사용할 수 있는 마지막 12개 행의 최소값을 찾으려면

tail -n 12  $FILEname | sort -g -k 5,5 | head -1|  awk '{print}'> tmp.out

하지만 어떻게 이러한 프로세스를 반복적으로 수행할 수 있습니까? 나는 열심히 노력했다

while read $FILEname
do
 ....
done

그러나 이는 성공하지 못했습니다.

파일은 다음과 같습니다

4.7 0.17    0.529   0   4.4846
4.7 0.17    0.529   1   4.5437474
4.7 0.17    0.529   2   5.63229739
4.7 0.17    0.529   3   4.672385157
4.7 0.17    0.529   4   4.698922468
4.7 0.17    0.529   5   4.699977195
4.7 0.17    0.529   6   4.699969329
4.7 0.17    0.529   7   3.69999717
4.7 0.17    0.529   8   4.6999998
4.7 0.17    0.529   9   2.7
4.7 0.17    0.59    10  3.9999998
4.7 0.17    0.59    11  4.69999999998
5   1   0.59    0   4.49569846
5   1   0.59    1   4.54330574
5   1   0.59    2   4.63739653
5   1   0.59    3   3.67233957
5   1   0.59    4   4.6989202468
5   1   0.59    5   4.699912595
5   1   0.59    6   4.6999329
5   1   0.59    7   4.69999999717
5   1   0.59    8   4.69999998
5   1   0.59    9   3.2547
5   1   0.529   10  4.69999999998
5   1   0.529   11  4.69999999998

약 2000줄이 있습니다.

답변1

노력하다

awk 'NR%12 == 1 { min=$5 ; line=$0; } 
    { if ($5 < min) { min=$5 ;line=$0; } } 
    NR%12 == 0 { print line ;} 
    END { if (NR%12) print line ;} ' 

이는 기본적으로 12줄(1,13,25,...)마다 min을 재설정하고, min을 계산하고, 12,24,36줄을 인쇄합니다.

행 수가 12의 배수가 아닌 경우 END 문은 마지막 1분을 인쇄합니다.

이 명령문을 한 줄로 작성하고 다음을 사용하여 호출할 수 있습니다.

awk '....' input_file.txt

관련 정보