TempsModel.txt
다음과 같이 생성된 파일이 있습니다 .
ls /media/Elise/2811226E69F71131/ModelOutput/* > TempsModel.txt
따라서 해당 디렉토리의 모든 파일이 나열됩니다. 파일은 모두 압축된 netcdf 파일이므로 다음과 같습니다.
/media/Elise/2811226E69F71131/ModelOutput/20091201_000000.nc.gz
/media/Elise/2811226E69F71131/ModelOutput/20091201_002023.nc.gz
/media/Elise/2811226E69F71131/ModelOutput/20091201_003009.nc.gz
/media/Elise/2811226E69F71131/ModelOutput/20091201_004020.nc.gz
을 포함하지 않으려면 이 목록이 필요합니다 .gz
. 이 세 문자를 제거하는 방법은 무엇입니까? 물어보려고 해쉘 스크립트에서 문자열 작업을 사용하여 문자열의 마지막 문자 제거그리고줄에서 마지막 문자 제거
TempsModel2.txt
하지만 목록에 마지막 세 문자가 포함되지 않은 두 번째 파일을 만드는 방법은 무엇입니까 ?
답변1
다음을 사용하여 파일을 생성하는 것은 모범 사례가 아닐 수 있습니다 ls
.
awk
:
awk '{sub(/.gz$/, ""); print}' TempsModel.txt > TempsModel2.txt
sed
:
sed 's/.gz$//' TempsModel.txt > TempsModel2.txt
.gz 확장명 없이 초기 파일을 생성하려면 다음을 수행할 수 있습니다.
for file in /media/Elise/2811226E69F71131/ModelOutput/*; do echo "${file%.gz}"; done > TempsModel.txt
다음과 같이 할 수도 있습니다.
set -- /media/Elise/2811226E69F71131/ModelOutput/*
printf '%s\n' "${@%.gz}" > TempsModel.txt
답변2
zsh를 사용할 수 있는 경우 다음과 같습니다.매개변수 확장을 사용하여 매개변수 목록 생성mkdir -p
, glob 한정자를 사용하여 접미사를 동적으로 제거할 수 있습니다.
setopt histsubstpattern extendedglob
print -rl -- /media/Elise/2811226E69F71131/ModelOutput/*.gz(#q:s/%.gz/) > TempsModel2.txt