정렬된 파일이 올바르게 저장되지 않았습니다. [닫음]

정렬된 파일이 올바르게 저장되지 않았습니다. [닫음]

파일을 정렬하면 새 파일에 저장하고 싶습니다. 나는 이것을 다음과 같이 사용합니다.

sort -nk{fieldnumber} test.json > testsort.json

출력에서 열은 섞이고 내가 정렬한 열은 임의 순서(오름차순 아님)로 표시됩니다. 왜 그럴까요? 그리고 이 정렬된 파일을 여러 부분으로 나누고 싶습니다. 모든 섹션을 다음과 같이 열별로 정렬하고 싶습니다.

partaa
{'a':'a', 'b':'b', 'c':1}
{'a':'a', 'b':'b', 'c':1}
{'a':'a', 'b':'b', 'c':2}

partab
{'a':'a', 'b':'b', 'c':2}
{'a':'a', 'b':'b', 'c':3}
{'a':'a', 'b':'b', 'c':3}

partac
{'a':'a', 'b':'b', 'c':4}
{'a':'a', 'b':'b', 'c':5}
{'a':'a', 'b':'b', 'c':6}

내가 사용할 게

split -l 100 testsort.json part

그럼에도 불구하고, 나는 계속 뒤죽박죽되고 순서가 정해지지 않은 출력을 받고 있습니다. (예를 들어, partac의 일부 값은 partab의 값보다 작을 수 있습니다)

폴리스티렌

감사합니다. 문제를 직접 발견했습니다. 일부 행에 추가 필드가 있으므로 입력이 손상되었습니다.

{'a':'a', 'b':'b', 'c':2}
{'a':'a', 'b':'b', 'c':1}
{'a':'a', 'b':'b', 'c':2}
{'a':'a', 'b':'b', 'd':'d', 'c':1}
{'a':'a', 'b':'b', 'c':3}
{'a':'a', 'b':'b', 'f':'f', 'c':4}

특정 필드를 검색하고 숫자 값을 가져와 맨 앞으로 가져와 정렬하는 다음 정규식을 구성합니다.

sed -e 's/^\(.*columnname\)\([^,]*\)/\2\t\1\2/;s/^[" :]*//' test.json | sort -nk1 |sed -e 's/^[^{]*//' > testSort.json

답변1

정렬을 위한 필드 구분 기호가 명령에 지정되지 않았습니다.

sort -nk25

기본적으로,필드 구분 기호정렬은 공백으로 구성됩니다 1 .
이는 3개 필드 중 25번째 필드를 정렬하고 있음을 의미합니다. 무엇을 정렬하려는지 확실하지 않습니다. 하지만 다음을 사용하여 공백으로 구분된 세 번째 열을 정렬해 볼 수 있습니다.

sort -nk3

보고 있는 열의 특정 내용에 따라 필드 구분 기호가 문자 집합(또는 정규 표현식)이 아닌 단일 문자만 될 수 있다는 문제가 발생할 수 있습니다. 아래에 설명된 특수한 경우는 예외입니다.
따라서 따옴표를 필드 구분 기호로 사용할 수 있으며 sort -t"'" ...문자 값을 기준으로 정렬하면 따옴표가 없기 때문에 숫자에는 작동하지 않습니다.


(1): 기본 필드 구분 기호에는 단일 또는 고정된 수의 공백 문자가 포함되지 않습니다. 구분 기호는 공백이 아닌 공백을 공백으로 변환하는 것입니다. 첫 번째 열에서 시작하지 않는 공백 문자열을 구분 기호로 만듭니다.

관련 정보