조인 열 사이에 ^M을 삽입하는 Unix `join` 명령을 수정하는 방법은 무엇입니까? -유닉스

조인 열 사이에 ^M을 삽입하는 Unix `join` 명령을 수정하는 방법은 무엇입니까? -유닉스

저는 초보 프로그래머입니다. 나는 join여러 개의 긴 파일을 함께 자체 결합하기 위해 유닉스 명령을 사용하고 있습니다.

join -j30 test test2
col1 col2 ... col30    col1 col2 ... col30
A    B        ZZZ   ^M A    B        ZZZ

^M출력에 이 문자가 표시됩니다.

왜 거기에 있습니까? 그리고 어떻게 삭제할 수 있나요?

편집: 아래는 내 출력 섹션의 스크린샷입니다.

여기에 이미지 설명을 입력하세요.

답변1

^M은 Windows에서 파일을 가져오거나 편집한다는 의미입니다.

dos2unix파일에 대한 명령을 사용하여 파일을 Unix 텍스트 모드로 변환합니다.

DOS는 줄 바꿈과 줄 바꿈 "\r\n"을 줄 종결자로 사용하는 반면 Unix는 줄 바꿈 "\n"만 사용합니다. ^M은 "추가" \r 문자를 시각적으로 표현한 것입니다.

이 명령을 설치하려면 dos2unix다음을 수행하십시오(Debian 기반 배포판에서):

sudo apt-get install dos2unix

또는 Mac(MacPorts)에서:

sudo port install dos2unix

또는 sed를 사용하여 다음과 같이 이 작업을 수행할 수 있습니다.

sed 's/\r$//' dosfile.txt > unixfile.txt

답변2

join(1)(적어도 내가 사용하고 있는 버전은) ^M연결된 파일에 추가하거나 입력 하지 join않지만 ^M. Hex 뷰어와 일부 테스트 사례를 통해 진행 상황을 확인할 수 있습니다.

$ echo "1 a" > test1
$ echo "1 b" > test2
$ join test1 test2 | od -bc
0000000   061 040 141 040 142 012                                        
           1       a       b  \n                                        
0000006
$

^M그리고 입력 파일에 테스트 케이스가 있습니다:

$ perl -E "say qq(1 a\r)" > test1
$ perl -E "say qq(1 b\r)" > test2
$ join test1 test2 | od -bc
0000000   061 040 141 015 040 142 015 012                                
           1       a  \r       b  \r  \n                                
0000010
$ 

dos2unix입력 파일을 수정하는 방법에는 여러 가지가 있습니다 (비록 tr파일이 줄 구분 기호의 고대 MacOS 전통을 사용하는 경우 \r이는 좋지 않은 생각이지만 ).

$ od -bc test1
0000000   061 040 141 015 012                                            
           1       a  \r  \n                                            
0000005
$ tr -d '\r' < test1 > foo
$ mv foo test1
$ od -bc test1            
0000000   061 040 141 012                                                
           1       a  \n                                                
0000004
$ 

관련 정보