내가 달성하고 싶은 것은 텍스트의 특정 지점(공백이나 열이 없는 텍스트 줄)을 기준으로 텍스트 줄을 정렬하는 것입니다. 해결책을 찾았는데, 좀 더 직접적이고 쉬운 방법이 있는지 알고 싶습니다.
나의 현재 접근 방식은 중단을 일으키는 것입니다. 즉, 각 행의 동일한 위치에 새 열을 생성한 다음(정렬하려는 지점 바로 앞, 즉 Sn_L001_Rn) 해당 열을 기준으로 정렬한 다음 두 열을 다시 연결하는 것입니다. 이것은 작동하지만 지나치게 복잡하고 투박해 보입니다. awk를 사용하여 등급 시스템을 만드는 것에 대한 게시물을 본 적이 있지만 내 등급 시스템은 최소 96 이상이어야 하기 때문에 매우 길어 보입니다. 나는 또한 sqlite가 작동할 수도 있다는 것을 보았지만 그것은 똑같이 장황해 보입니다. 이미 이런 질문을 받으셨다면 죄송합니다만, 아직까지는 쉬운 해결 방법을 찾지 못했습니다.
다음은 몇 가지 입력 예입니다.
SOON_S2_L001_R1_001.txt
SOON_S2_L001_R2_001.txt
HELLO_S4_L001_R1_001.txt
HELLO_S4_L001_R2_001.txt
BASH_S1_L001_R1_001.txt
BASH_S1_L001_R2_001.txt
WORLD_S3_L001_R1_001.txt
WORLD_S3_L001_R2_001.txt
원하는 출력:
BASH_S1_L001_R1_001.txt
BASH_S1_L001_R2_001.txt
SOON_S2_L001_R1_001.txt
SOON_S2_L001_R2_001.txt
WORLD_S3_L001_R1_001.txt
WORLD_S3_L001_R2_001.txt
HELLO_S4_L001_R1_001.txt
HELLO_S4_L001_R2_001.txt
복잡성을 더하기 위해 동일한 Sn이 1개 이상인 경우 이름을 고려하고 싶습니다(비록 이 문제는 의 플래그를 사용하여 해결할 수 있다고 생각합니다 sort
).
답변1
sort -t_ -k2 infile
데이터는 밑줄을 구분 기호로 사용하여 두 번째 키를 사용하여 정렬됩니다.