awk:

awk:

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

関連情報