변수 bash 스크립트 뒤에 와일드카드 사용

변수 bash 스크립트 뒤에 와일드카드 사용

나는 모든 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/.

관련 정보