sed の出力をリダイレクトするために、変数の値でディレクトリ内にディレクトリを作成します。

sed の出力をリダイレクトするために、変数の値でディレクトリ内にディレクトリを作成します。

ファイルをインポートし、forループの値を使用して(sedを使用)変更し、同じforループ中に作成されたディレクトリにリダイレクトしようとしています。

ソースファイル>ディレクトリの作成>プロセスファイル(変更の適用)>出力をディレクトリにリダイレクトする

私の問題は、私の変数の値でディレクトリを作成することです。

read NaMeoFFiLe
read startepsilonvalue
NaMeDiR="${startepsilonvalue}plus10steps"
mkdir "${NaMeDiR}"
for ((i=$stteps; i<=$lsteps; i+=1)); do
        k=$(bc <<<"""scale=1; $i /10")
        echo $k
        mkdir "${NaMeDiR}/${k}"
        ls "${NaMeDiR}"
        sed -e '0,/epsilon = ./{//c\epsilon = '"$startepsilonvalue" -e '}' \
                 "${NaMeoFFiLe}" > "${k}_${NaMeiFFiLe}"
        cat "${NaMeDiR}/${k}/${k}_${NaMeoFFiLe}" &
done

問題は、forループの外側に最初のディレクトリを作成できますが、forループ内では最初と最後のディレクトリのみを生成し、sedコマンドの変更を行わないことです。

私が受け取るエラーは、私が探しているディレクトリにファイルが存在しないことです。これは、ディレクトリがまだ作成されていないため明らかです。

私が逃したものはありますか?

ベストアンサー1

このコードスニペットには、混乱を引き起こす可能性のある小さなものがたくさんあるようです。

まず、書かれたように、時にはディレクトリをUnixの隠しディレクトリとして定義する点(例えば、、など)$kで始めることができます。最初にチェックするのは、これらのディレクトリが隠されているかどうかです。.1.2

ls -A

${k}_${NaMeiFFiLe}次に、作成中の新しいディレクトリではなく親ディレクトリに作成されます。また、$kドットで始まる場合が多いため、親ディレクトリに隠されている場合もあります。コードフローを考慮すると、ファイルを新しいサブディレクトリに保存したいとします。 trueの場合、次のようになります(...単純化のために正規表現を次に置き換えました)。

sed -e '...' "${NaMeoFFiLe}" > "${NaMeDiR}/${k}/${k}_${NaMeoFFiLe}"

ちなみに、サブディレクトリを含む完全なディレクトリ階層を生成するmkdirオプションフラグがあります-p。これは外部ループが不要であることを意味しますmkdir

mkdir -p "${NaMeDiR}/${k}"

最後に、もう少し主観的な観点から、コードレビュー担当者は非常に読みにくいので、変数名を大文字にする方法を考え直すことを提案しています...ある潜在的なミスを識別したようです。

おすすめ記事