매우 간단한 문제가 있지만 어떤 이유로 작동하지 않습니다..
.txt
이 파일은 다음 형식으로 있습니다 .
2 250 1
4 250 1
5 250 1
첫 번째 열의 숫자에서 1을 빼고 다음을 얻고 싶습니다.
1 250 1
3 250 1
4 250 1
나는 bash에서 이 코드를 사용합니다:
awk '{ print $1-1,$2,$3 }' file.txt > newfile.txt
나는 이 코드가 괜찮다고 생각했지만, 이 텍스트 파일의 파일 확장자가 에서 변경되었기 때문에 .csv
이 .txt
awk 라인은 제대로 작동하지 않는 것 같습니다. 그것은 다음을 생산합니다 :
1 250 1
4
내가 가지고 있는 텍스트 파일과 잘 작동할 수 있는 대안이 있나요?
업데이트: pico 편집기를 사용하여 파일 중 하나를 다시 생성했는데 이제 위의 코드가 완벽하게 실행되므로 형식 및 속성 측면에서 원본 텍스트 파일에 문제가 있는 것 같습니다... 어떤 통찰력이 있습니까?
답변1
설명된 문제는 줄 끝과 관련된 것 같습니다. 텍스트 파일에 캐리지 리턴/줄 바꿈 문자가 있는 경우 awk
캐리지 리턴은 다른 공백 문자로 처리되어 출력에서 텍스트를 덮어씁니다.
편집에 의한 OP pico
(이에 따라 개행 줄 끝을 가정)개행 문자를 설정하는 더 쉬운 방법페이지). dos2unix
Fix Line Endings와 같은 프로그램을 사용할 수도 있습니다 .
추가 자료:
답변2
@Thomas Dickey가 말한 것이 해결책인 것 같습니다!
이 코드를 사용하여 perl -pe 's/\r\n|\n|\r/\n/g'
텍스트 파일을 유닉스 형식으로 변환합니다. dos2unix 프로그램과 유사합니다. 이제 Awk는 완벽하게 작동합니다!
모두 감사합니다
답변3
이 unix2dos/dos2unix
유틸리티를 사용하면 이 문제를 쉽게 해결할 수 있습니다. 머신이 있는 경우 UNIX/Linux
머신을 설치하고 다음 명령을 실행해 보세요.
dos2unix file
텍스트 파일을 처리하기 전에 유틸리티를 실행하여 해당 파일의 엔디안이 무엇인지 알아내는 것이 UNIX/Linux
합리적입니다 .file