awk 명령이 제대로 작동하지 않습니다

awk 명령이 제대로 작동하지 않습니다

매우 간단한 문제가 있지만 어떤 이유로 작동하지 않습니다..

.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.txtawk 라인은 제대로 작동하지 않는 것 같습니다. 그것은 다음을 생산합니다 :

1    250    1
4

내가 가지고 있는 텍스트 파일과 잘 작동할 수 있는 대안이 있나요?

업데이트: pico 편집기를 사용하여 파일 중 하나를 다시 생성했는데 이제 위의 코드가 완벽하게 실행되므로 형식 및 속성 측면에서 원본 텍스트 파일에 문제가 있는 것 같습니다... 어떤 통찰력이 있습니까?

답변1

설명된 문제는 줄 끝과 관련된 것 같습니다. 텍스트 파일에 캐리지 리턴/줄 바꿈 문자가 있는 경우 awk캐리지 리턴은 다른 공백 문자로 처리되어 출력에서 ​​텍스트를 덮어씁니다.

편집에 의한 OP pico(이에 따라 개행 줄 끝을 가정)개행 문자를 설정하는 더 쉬운 방법페이지). dos2unixFix 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

관련 정보