다음을 포함하는 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은 출력을 정렬하지 않는 것 같습니다. 단지 열/필드 범위를 선택하고 원본과 동일한 순서로 출력합니다.