![sed, sort, tail을 사용하여 파일의 n 간격마다 열의 최소값을 찾는 방법은 무엇입니까?](https://linux55.com/image/99504/sed%2C%20sort%2C%20tail%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20n%20%EA%B0%84%EA%B2%A9%EB%A7%88%EB%8B%A4%20%EC%97%B4%EC%9D%98%20%EC%B5%9C%EC%86%8C%EA%B0%92%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
파일의 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