UNIX (제 경우에는 Cygwin) 정렬 유틸리티를 사용하여 정렬하려는 고정 너비 필드 파일이 있습니다.
문제는 파일 맨 위에 두 줄 헤더가 있고 파일 맨 아래로 정렬된다는 것입니다 (각 헤더 행이 콜론으로 시작됨).
정렬을 “정렬되지 않은 상태에서 처음 두 줄을 전달”하거나 콜론 줄을 맨 위로 정렬하는 순서를 지정하는 방법이 있습니까? 나머지 줄은 항상 6 자리 숫자로 시작합니다 (실제로는 I 그게 도움이된다면 정렬 중입니다.
예:
:0:12345
:1:6:2:3:8:4:2
010005TSTDOG_FOOD01
500123TSTMY_RADAR00
222334NOTALINEOUT01
477821USASHUTTLES21
325611LVEANOTHERS00
다음과 같이 정렬해야합니다.
:0:12345
:1:6:2:3:8:4:2
010005TSTDOG_FOOD01
222334NOTALINEOUT01
325611LVEANOTHERS00
477821USASHUTTLES21
500123TSTMY_RADAR00
답변
(head -n 2 <file> && tail -n +3 <file> | sort) > newfile
괄호는 단일 명령에서 나온 것처럼 파이프하거나 리디렉션 할 수 있도록 stdout을 감싸는 서브 쉘을 만듭니다.
답변
을 사용해도 괜찮다면 의 내장 파이프 기능 awk
을 활용할 수 있습니다.awk
예.
extract_data | awk 'NR<3{print $0;next}{print $0| "sort -r"}'
이렇게하면 처음 두 줄이 그대로 인쇄되고 나머지 줄은 sort
.
이것은 파이프 된 입력의 일부를 선택적으로 정렬 할 수 있다는 매우 특별한 이점이 있습니다. 제안 된 다른 모든 방법은 여러 번 읽을 수있는 일반 파일 만 정렬합니다. 이것은 무엇이든 작동합니다.
답변
다음은 파이프 된 데이터에서 작동하는 버전입니다.
(read -r; printf "%s\n" "$REPLY"; sort)
헤더에 여러 줄이있는 경우 :
(for i in $(seq $HEADER_ROWS); do read -r; printf "%s\n" "$REPLY"; done; sort)
이 솔루션은 여기에서
답변
간단한 경우 sed
에는 작업을 우아하게 수행 할 수 있습니다.
your_script | (sed -u 1q; sort)
또는 동등하게
cat your_data | (sed -u 1q; sort)
키는 1q
-print first line (header) 및 종료 (나머지 입력은 sort
)에 있습니다.
주어진 예 2q
에서 트릭을 수행합니다.
-u
스위치 (버퍼링)이 그 필요 sed
당신이 통과하도록 (특히, GNU의) 그렇지 않으면 덩어리에서 입력을 읽을 것입니다하여 데이터를 소모의 sort
대신.
답변
사용할 수 있습니다 tail -n +3 <file> | sort ...
(tail은 세 번째 줄에서 파일 내용을 출력합니다).
답변
head -2 <your_file> && nawk 'NR>2' <your_file> | sort
예:
> cat temp
10
8
1
2
3
4
5
> head -2 temp && nawk 'NR>2' temp | sort -r
10
8
5
4
3
2
1
답변
2 줄의 코드 만 있으면됩니다 …
head -1 test.txt > a.tmp;
tail -n+2 test.txt | sort -n >> a.tmp;
숫자 데이터의 경우 -n이 필요합니다. 알파 정렬의 경우 -n이 필요하지 않습니다.
예제 파일 :
$ cat test.txt
헤더
8
5
100
1
-1
결과 :
$ cat a.tmp
헤더
-1
1
5
8
100