나는 모든 csv 파일을 월별 파일로 병합하는 스크립트를 얻으려고 노력해 왔습니다. 아래 스크립트는 작동하지 않으며 다음 오류가 발생합니다.
awk: fatal: cannot open file `/ibv_ftp/merged/folder/file201910*.csv' for reading (No such file or directory)
다음은 스크립트가 제대로 작동하지 않는 예입니다. 모든 "file20191030.csv" 파일 대신 "file201910*.csv" 파일을 찾습니다. 매일 고유한 프로필이 있습니다.
확실하게.내가 겪고 있는 문제는 별표를 와일드카드 문자로 사용할 수 없다는 것입니다. 하지만 파일 이름에는 사용됩니다. 변수 다음에 호출하면 작동하지 않는 것 같습니다. 따옴표를 사용하거나 사용하지 않거나 별표 대신 [01-31] 또는 물음표를 사용하는 등 다양한 방식으로 변수를 사용하는 경우도 있습니다. 모두 파일 이름의 일부로 나타납니다.
# Defines the current year
y=$(date +'%Y')
# Choose which months to be merged
for i in {06..10}
do
# Defines year and month
ym=$(date +'%Y')"$i"
# monthly
awk 'FNR==NR||FNR>2' /ibv_ftp/merged/folder/file"$ym"*.csv > /ibv_ftp/merged/monthly/file"$ym".csv
done
스크립트는 /ibv_ftp/merged/folder/file201910*.csv 또는 file201910[01-31].csv 또는 file201910??.csv를 호출합니다. 이전 스크립트가 작동합니다. 다음과 같이 다른 파일을 사용합니다.
today=$(date +'%Y%m%d')
echo $today
# daily
awk 'FNR==NR||FNR>2' /ibv_ftp/folder/iv1_"$today"_*.csv > /ibv_ftp/merged/daily/folder/file"$today".csv
이 예에서 파일 이름은 iv1_20191030_111500.csv입니다(마지막 부분은 타임스탬프입니다).
답변1
이 오류는 패턴과 일치하는 항목이 없음을 나타냅니다 /ibv_ftp/merged/folder/file201910*.csv
. (예를 들어 쉘이 와일드카드 문자를 확장할 수 없는 경우 *
일반적으로 이를 리터럴로 남겨두기 때문에 이렇게 합니다.)
작업 코드라고 부르는 것을 보면 소스 패턴은 /ibv_ftp/folder/
작동하지 않는 코드가 사용하는 위치에서 시작됩니다 /ibv_ftp/merged/folder/
.