다음은 "순수한" awk솔루션입니다.
인덱스가 항상 샘플 데이터에서와 같이 증분 정수 시퀀스 (6115-6119)와 동일한 경우 알고리즘 "바로 가기"를 사용할 수 있습니다.
awk '{a[$1]=$0} !(NR%4){for(i=6115;i<6119;print a[i++]);}'
이것은 않습니다
a인덱스 위치에 분포 된 모든 행을 배열에 추가합니다. 6115-6119
- 4 번째 줄 (
!(NR%4)) 마다 배열 내용을 반복하여 원하는 순서로 인쇄하십시오.
숫자 색인이 항상 네 개의 동일한 색인이지만 증가하는 정수 시퀀스가 아닌 경우 정렬해야합니다.
awk '{a[$1]=$0} !(NR%4){asort(a,b); for(i=1;i<5;print b[i++]);}'
참고 : 이것은 GNU awk와 관련이 있으며 다른 사람들은 지원하지 않을 수 있습니다 asort.
4 개 블록마다 다른 숫자 ID를 가질 수있는 경우 :
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;print a[i++]); delete a}'
참고 : @Gilles self-answer (+2)의delete TIL은 POSIX가 아니지만 보편적으로 지원됩니다 .
올바른 ™ 사용 버전 delete:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;delete a[i++]){print a[i]}}'
더 많은 메모리와 크기를 사용하여 삭제하지 않은 버전 :
awk '{a[n][$1]=$0} !(NR%4){asort(a[n]); for(i=1;i<5;print a[n][i++]); n++}