인쇄할 때 텍스트 순서가 엉망입니다.

인쇄할 때 텍스트 순서가 엉망입니다.

파일의 데이터 구조를 변경하기 위해 자동화된 프로세스를 실행하고 있으며 약 1년 동안 아무런 문제 없이 실행되었습니다. 방금 실패하기 시작했고 문제의 범위를 파일의 날짜 필드 중 하나로 좁혔습니다. 문제가 발생하기 전과 후의 파일은 동일해 보이지만 실제로는 뭔가가 진행되고 있습니다. 파일을 다른 텍스트와 함께 화면에 인쇄하려고 하면 순서가 엉망이 됩니다. 파일에서 숨겨진 문자를 찾을 수 없지만 분명히 하나가 있을 것으로 생각됩니다. 전에 이것을 본 사람이 있나요?

여기에 예가 있습니다. 의심되는 필드를 제외한 파일의 모든 항목을 제거하고 이전 파일을 새 파일과 비교했습니다.

$ cat old.file
16-JUN-2015
15-JUN-2015
$ cat old.file | awk '{print "a" $1 "b"}'
a16-JUN-2015b
a15-JUN-2015b
$ for line in `cat old.file`;do echo "a${line}b";done
a16-JUN-2015b
a15-JUN-2015b
$
$
$ cat new.file
23-JUN-2015
16-JUN-2015
$ cat new.file | awk '{print "a" $1 "b"}'
b23-JUN-2015
b16-JUN-2015
$ for line in `cat new.file`;do echo "a${line}b";done
b23-JUN-2015
b16-JUN-2015

저는 Red Hat EL 서버를 실행하고 있습니다. 감사해요,

답변1

어쨌든 Windows 스타일의 줄 끝이 표시됩니다 CRLF \x0D\xOA \r\n.

printf 'xyz\r\n' >file; cat file | awk '{print "a" $1 "b"}'

산출bxyz


cat file | sed -n l 

출력 xyz\r$- $줄 끝을 나타냅니다.


쌍에서 불필요한 \rs를 필터링할 수 있습니다.\r\nawk

cat file | awk -vRS='\r?\n' 1 | sed -n l

산출xyz$


이 문제를 해결하려면:

cat file | awk -vRS='\r?\n' 1 > file.fixed

왜 이런 문제가 발생합니까?

cat file터미널에 출력이 표시 되면 Carriage \r-Return 키가 의도한 대로 작동합니다.마차로 돌아가기완전히 왼쪽으로. 터미널의 경우 이는 텍스트 삽입 지점이 화면의 왼쪽 가장자리로 이동한다는 것을 의미합니다. 이는 \r수동 타자기 시대에서 파생된 용어 및 개념입니다.운송예전에는반품왼쪽 여백으로(수동 레버를 통해) 왼쪽 여백에 도달하면 롤러는 용지를 한 줄 아래로 이동합니다.연준논문 1철사.

터미널에서 이전에 열 1에 있던 모든 항목은 b이후 로 인해 \r덮어쓰여집니다 b.a

답변2

이는 new-linecariage-return문제일 수 있습니다. 새 파일에는 ^M줄바꿈이 아닌 캐리지 리턴만 있는 것 같습니다. file /path/to/new.file반환되는지 확인해보세요 .ASCII text, with CR line terminators

귀하의 경우, 입력 줄과 줄 종결자를 a인쇄하면 ^M먼저 줄의 시작 부분으로 이동한 다음 인쇄하라는 의미입니다 b.

답변3

줄 끝의 줄 바꿈(^J) 대신 새 파일의 캐리지 리턴(^M)입니다. cat -v new.file을 시도하고 hd를 사용하여 파일을 보십시오.

sed를 사용하여 다음과 같이 불필요한 캐리지 리턴을 제거할 수 있습니다.

sed 's/\r//' 새 파일

관련 정보