%EB%A5%BC%20%EB%B0%94%EA%BE%BC%20%EB%8B%A4%EC%9D%8C%20%EB%AC%B8%EC%9E%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
나는 UNIX 사용자는 아니지만 개인적으로 충분한 시간을 할애할 수 없는 이 스크립트를 제외하고 여기저기서 작은 스크립트를 작성하는 데는 충분히 이해하고 있습니다.
다음 작업을 수행해야 하는 디렉터리에 약 2000개의 파일이 있습니다.
- 각 파일에는 약 3000개의 레코드가 있지만 모두 Ctrl M 개행 문자로 구분된 각 파일의 한 줄에 있습니다. 이것들은 분리되어야 합니다.
- 각 파일에는 8번째 문자부터 14번째 문자까지 시작하는 첫 번째 줄에 생성된 해당 날짜가 있습니다. 이 날짜는 파일 이름을 XXX_YYYYMMDD_AAA.txt로 바꾸는 데 사용해야 합니다.
답변1
dos2unix
대부분의 시스템에는 이 작업을 수행하는 데 필요한 파일을 처리하기 위해 스크립트에서 "시작"할 수 있는 도구가 포함되어 있습니다 .
파일이 모두 디렉토리에 있으면 find
해당 파일을 찾은 다음 다음과 같이 각 파일을 개별적으로 작업할 수 있습니다.
$ find . -type f -exec dos2unix {} +
예
이 디렉터리 구조가 있다고 가정해 보겠습니다.
$ tree
.
|-- afile
|-- dir1
| `-- afile
`-- dir2
`-- afile
우리는 우리의 find
기술을 사용하여 모든 파일이 CRLF 줄 종료가 있는 "DOS" 파일인지 확인할 수 있습니다.
$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile: ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators
그리고 다음과 같이 모든 것을 수리하십시오.
$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...
결과적으로 Unix 파일만 생성되었습니다.
$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile: ASCII text
./dir1/afile: ASCII text