ループ内のファイル名を変更する

ループ内のファイル名を変更する

ループがあり、awkを使用していくつかの列を選択してソートし、出力ファイルの名前を新しい名前に変更したいと思います。私のawkとsortはうまくいきますが、入力ファイル名とは異なるファイル名を取得したいのですが、そうすることはできません。このループを実行する別のディレクトリ(a、b、c)があります。コマンドは次のとおりです。

for i in a b c 
do
    (cd $i/; for i in *_test2.txt; do awk '{print $2"_"$1}' $i | sort -V > ${i%.txt}3.txt; done)
done

ファイル名を次に変更したいのですが、*_test3.txtループ内の出力は次のようになります。*_test23.txt どうすればいいですか?

ベストアンサー1

${i%.txt}.txtファイル名から拡張子のみが削除されます$i。追加の文字を選択するには、次のようにします${i%?.txt}

for i in {a,b,c}/*_test2.txt; do
  awk '{ print $2 "_" $1 }' "$i" | sort -V -o "${i%?.txt}3.txt"
done

おすすめ記事