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
。これらの3文字を削除する方法は?聞いてみようシェルスクリプトで文字列操作を使用して文字列の最後の文字を削除するそして行から最後の文字を削除
TempsModel2.txt
しかし、リストに最後の3文字が含まれていない2番目のファイルを作成する方法は?
答え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