cygwin 정렬을 사용하여 n번째 열에서 탭으로 구분된 파일을 어떻게 정렬합니까?

StackOverflow https://stackoverflow.com/questions/426647

  •  06-07-2019
  •  | 
  •  

문제

두 번째 열에 정렬하고 싶은 거대한 탭 분리 파일이 있습니다.cygwin 정렬에서 필드 구분 기호로 탭 문자를 사용해야 합니다.그래서 다음과 같은 것이 필요합니다.

sort -t \t -k 2,2 in.txt > out.txt

그러나 명령 프롬프트는 ' '를 탭 문자가 아닌 문자 그대로 평가합니다.Cygwin을 실행하는 Windows 시스템에서 이 작업을 수행해야 합니다.다음과 같은 변형

sort -t "\t"
sort -t \"\t\"

작동하지 않습니다. 위의 대신 실제 탭이 있는 cmd 파일에 이것을 넣는 것도 아닙니다.

편집하다:DOS 쉘이나 Cygwin bash 쉘을 사용하는 솔루션은 괜찮습니다.

도움이 되었습니까?

해결책

내 컴퓨터에서 (Mac Bash Prompt, GNU 정렬 ...) 이것은 작동합니다.

sort -t '   ' -k 2,2 in.txt > out.txt

(따옴표 사이의 "실제"탭.)

탭을 가져 오려면 ctrl-v, 탭 (ctrl-v 뒤에 탭)을 입력합니다.

편집 : 이제 Cygwin 프롬프트에서 Windows 컴퓨터에서 테스트했으며 예상대로 Bash가 Bash입니다).

다른 팁

문자열 보간을 켜려면 t 앞에 $ 부호를 추가해야하므로 탭이 실제로 정렬되도록 전송됩니다. 이것은 모든 터미널에서 작동해야합니다.

sort -t $'\t' -k 2,2 in.txt > out.txt

Windows 명령 프롬프트에서 내가 찾은 가장 간단한 솔루션은 다음과 같은 탭 완성을 먼저 비활성화하는 것입니다.

cmd /f:off

그런 다음 문자 그대로 탭 문자를 입력 할 수 있습니다.

Windows에서 GNUWIN32 정렬 솔루션을 원했지만 위의 솔루션 중 어느 것도 명령 줄에서 작동하지 않았습니다. 그러나 다음 배치 파일 (.bat)은 제가 원했던 것입니다. 이중 인용문 내에 탭 문자를 입력하십시오.

C :> Cat foo.bat

정렬 -k3 -t ""tabfile.txt

여기서 아이러니한 점을 아시는 분 계시나요?
탭 문자를 탭으로 만들려면 여러 가지 과정을 거쳐야 합니다.

Windows 명령 프롬프트에서 다음을 사용하여 이를 수행할 수 있었습니다.
c:\bin\sort -t"(실제 탭)" 그러나 cmd /f:off를 시작한 후에만 가능합니다(위에서 힌트한 대로).

Windows bat 파일에서는 텍스트 편집기(notepad2 :-)가 탭을 공백이 아닌 탭으로 삽입하도록 설정되어 있는 한 동일한 작업을 수행할 수 있었습니다.

-t$' "를 사용하는 데 유용한 몇 가지 힌트가 있지만 운이 없거나 남은 머리카락 없이 약 2^16개의 조합을 시도했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top