在循环中重命名文件名

在循环中重命名文件名

我有一个循环,我想用 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 How can I do that?

答案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

相关内容