我有一个循环,我想用 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