잘라내기 명령을 사용하여 필드/문자 재정렬

잘라내기 명령을 사용하여 필드/문자 재정렬

중복 가능성:
단일 명령으로 2개의 서로 다른 컷 출력을 결합하시겠습니까?

다음을 포함하는 temp.txt 파일이 있습니다.

ABCDF

PQRST

LMNOP

cut이 명령을 시도했습니다

$ cut -c 2-5 temp.txt
BCDF

QRST

MNOP

출력이 정확합니다.

$ cut -c 1,2,3,4 temp.txt
ABCD

PQRS

LMNO

출력이 정확합니다.

하지만 순서를 바꾸면 다음과 같은 의미가 됩니다.

$ cut -c 2-4,1 temp.txt
ABCD

PQRS

LMNO

위의 출력을 보여주세요.

그러나 논리적으로 출력은

BCDA

QRSP

MNOL

그래서 내 질문은 이런 일이 어떻게 발생하고 그 이유가 무엇인지입니다.

답변1

설명은 에 있지만 man cut, 선호하는 기대치로 생각하기 쉽습니다. 그러나 그것은 말합니다:

Selected input is written in the same order that it is read  

입력의 의미가 모호할 수 있으나 일반적으로 옵션은 옵션일 뿐이며 처리되는 파일은 반드시입력하다.

예를 들어 의 list. -c 2,3,4,1정규식 목록과 매우 유사합니다. [2341]; 두 배가 되더라도 목록에 있는 모든 숫자를 의미합니다. 예를 들어 -c 2,2,2,2,2,2.. 와 동일하고 -c 2정규식의 경우 [2222222]... 와 동일합니다 [2]. 중요하지 .

답변2

해결책은 다음과 같습니다.

sed 's:^\(.\)\(.*\):\2\1:' file.txt

(어제 비슷한 질문에 누군가가 답변을 게시했습니다)

Cut은 출력을 정렬하지 않는 것 같습니다. 단지 열/필드 범위를 선택하고 원본과 동일한 순서로 출력합니다.

관련 정보