숫자와 null 값 목록이 있습니다. null 값이 목록 sort
끝에 도달하도록 in을 사용하여 정렬하는 방법GNU 핵심 도구?
입력 샘플 열(input.data)
0.9000
23
1
2
5
-0.9000
-23
-1
-2
-5
을 사용하려고 하면 sort -g input.data
출력은 다음과 같습니다.
<NULL>
<NULL>
<NULL>
-23
-5
-2
-1
-0.9000
0.9000
1
2
5
23
여기서는 null 값이 맨 위에 배치됩니다. 목록 끝에 null 값을 넣을 수 있나요? 다음을 기대하십시오:
-23
-5
-2
-1
-0.9000
0.9000
1
2
5
23
<NULL>
<NULL>
<NULL>
편집: 맨 아래에 null 값을 넣는 목적은 데이터 집합을 정렬하고 맨 아래에 null 값이 있는 행을 넣는 것입니다.
이건 내가 예상했던 거고,
| Sample Input || Current output || Expected output |
|-------------------------------||-------------------------------||----------------------------|
| 2 0.9000 value 1 || 11 value 10 || 10 -23 value 9 |
| 3 23 value 2 || 4 value 3 || 14 -5 value 13 |
| 4 value 3 || 8 value 7 || 13 -2 value 12 |
| 5 1 value 4 || 10 -23 value 9 || 12 -1 value 11 |
| 6 2 value 5 || 14 -5 value 13 || 9 -0.9000 value 8 |
| 7 5 value 6 || 13 -2 value 12 || 2 0.9000 value 1 |
| 8 value 7 || 12 -1 value 11 || 5 1 value 4 |
| 9 -0.9000 value 8 || 9 -0.9000 value 8 || 6 2 value 5 |
| 10 -23 value 9 || 2 0.9000 value 1 || 7 5 value 6 |
| 11 value 10 || 5 1 value 4 || 3 23 value 2 |
| 12 -1 value 11 || 6 2 value 5 || 11 value 10 |
| 13 -2 value 12 || 7 5 value 6 || 4 value 3 |
| 14 -5 value 13 || 3 23 value 2 || 8 value 7 |
답변1
적절한 후처리기를 통해 결과를 전송할 수 있습니다. 이것은 내가 sed를 사용하여 작성한 내용입니다.
#!/bin/sed -f
# Move any null into hold space
/^$/{
H
d
}
# Insert nulls after last line
$G
# Delete an extra newline this introduces
$s/\n//
sort
빈 줄 대신 쓰는 경우 <NULL>
모드를 /^$/
로 변경해야 합니다 /^<NULL>$/
.
데모
sort -g <<EOF | ./475768.sed
0.9000
23
1
2
5
-0.9000
-23
-1
-2
-5
EOF
-23
-5
-2
-1
-0.9000
0.9000
1
2
5
23
답변2
sort -g input.data | grep [0-9] && grep -v [0-9] input.data
- 유형
- 숫자만 필터링
- grep 명령을 반대로 실행하여 나머지 NULL을 추가합니다.
답변3
다음과 같이 플래그 V
와 r
in을 사용할 수 있습니다.sort
sort -Vr file
-23
-5
-2
-1
-0.9000
23
5
2
1
0.9000
.
~에 따르면다소:
-r, --reverse reverse the result of comparisons
-V, --version-sort natural sort of (version) numbers within text
답변4
다음 예시 입력을 사용하세요.
$ cat infile
2 0.9000 value 1
3 23 value 2
4 value 3
5 1 value 4
6 2 value 5
7 5 value 6
8 value 7
9 -0.9000 value 8
10 -23 value 9
11 value 10
12 -1 value 11
13 -2 value 12
14 -5 value 13
다음 명령을 사용하십시오.
$ sort -k 3n,3n -k 2g,2g infile
결과는 다음과 같습니다.
10 -23 value 9
14 -5 value 13
13 -2 value 12
12 -1 value 11
9 -0.9000 value 8
2 0.9000 value 1
5 1 value 4
6 2 value 5
7 5 value 6
3 23 value 2
4 value 3
8 value 7
11 value 10
줄이 줄 앞 이 아니라 끝에 있기 Expected output
때문에 답변과 다릅니다 . 계속 진행 하거나 정렬 해야 하는 이유가 있거나 문제가 예시 데이터에서 제시하는 것보다 더 심각한 경우 질문을 업데이트하세요.11 value 10
4 value 3
11 < 4 < 8
10 < 3 < 7