У меня есть цикл, и я хочу выбрать несколько столбцов с помощью awk и выполнить сортировку, а затем переименовать выходной файл с помощью новое имя. Мои awk и сортировка работают хорошо, но я хочу получить имя файла с другим именем моего входного файла, а я не смог этого сделать. У меня есть разные каталоги для запуска этого цикла: 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
Как я могу это сделать?
${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