저는 요즘 Unix Script를 공부하고 있습니다. 이전에 Unix 스크립트를 사용해 본 적이 없었기 때문에 갑자기 내 프로그램을 지원하기 위해 Unix 스크립트를 만들어야 했습니다.
기본적으로 저는 제 경우에 대해 다음 조언을 찾고 있습니다.
ETL 도구 중 하나를 사용하여 로드해야 하는 소스 파일 이름 목록이 포함된 파일이 있습니다.
예를 들어 나는 VALID_FILENAME.csv
이런 것을 가지고 있습니다.
test1_file.csv
test2_file.csv
test3_file.csv
각 부분마다 제목, 세부정보, 예고편이 있으므로 3개 부분으로 복사하고 싶습니다.
내 기대는 3개의 파일에 복사 VALID_FILENAME.csv
하고 이름을 VALID_FILENAME_H
, VALID_FILENAME_D
로 지정하는 것입니다 VALID_FILENAME_T
.
내용도 아래와 같이 교체하겠습니다.
VALID FILENAME_H
:
test1_file_H
test2_file_H
test3_file_H
VALID FILENAME_D
:
test1_file_D
test2_file_D
test3_file_D
VALID FILENAME_T
:
test1_file_T
test2_file_T
test3_file_T
내 질문은 cp를 사용하고 파일 이름을 바꾸어 VALID_FILENAME.csv
3개의 파일을 더 복사할 수 있다는 것입니다. sed를 사용하여 .csv를 H/D/T로 바꾸는 것도 가능합니까?
ETL 도구가 헤더, 세부 정보 및 트레일러를 별도의 프로세스로 처리하므로 이를 세 부분으로 분할해야 하는 이유는 무엇입니까?
파일을 복사하고 파일 이름을 다른 이름으로 바꾸고 Unix에서 파일 내의 문자열을 바꾸는 가장 좋은 방법에 대한 제안이나 의견을 감사드립니다.
답변1
cp만으로는 한 번의 실행으로 여러 파일을 만들 수 없습니다.
매우 우아하지는 않지만 다음 루프를 사용하여 목표를 달성할 수 있습니다.
for file in *.csv;do for end in _H _D _T ;do pc $file ${file%.csv}$end;done;rm $file;done
기본적으로 모든 csv 파일을 반복하여 세 개의 복사본을 만들고 원본을 삭제합니다.