#bash #shell
#bash #оболочка
Вопрос:
Итак, в основном у меня есть программа, которая создает файл, и файл сценария, который в каталоге использует входные данные из этого файла, печатает только последнюю строку файла. проблема в том, что файл создается в его текущем каталоге, и я хочу, чтобы он был создан в заданном. Для этого я использовал команду mv, которая не обязательно создает в другом каталоге, просто перемещая ее, чего я не хочу.
Возможно, вы скажете, что нужно изменить программу, которая создает файл, дело в том, что я не могу. Я могу изменить только файл сценария оболочки.
Программа:
#!/bin/bash
inputdir="${1}"
outputdir="${2}"
maxthreads="${3}"
Ext=".txt"
prefix="$inputdir/"
for file in $(ls ${inputdir}/*.txt)
do
filename=$(basename -- "$file" .txt)
for i in $(seq 1 ${maxthreads})
do
echo "InputFile="${filename} "NumThreads="${i}
outname="${filename}-${i}".txt
# tecnicofs basically creates the out file
./tecnicofs ${file} ${outname} ${i} |sed '/^$/d'| awk NR | sort -nr| awk 'NR==1'
mv ${outname} ${outputdir}
done
done
Как вы можете видеть в конце, я перемещаю файл в нужный мне выходной каталог, но, как я уже сказал, я хочу переместить, я хочу, чтобы он был создан в выходном каталоге, так что есть ли способ сделать это без создания в моем текущем каталоге и его перемещения?
Комментарии:
1. Почему не просто
out="${outputdir}/${filename}-${i}".txt
?2. на самом деле, потому что filename — это входной файл, используемый в программе tecnicofs
3. Эта строка требует много работы
./tecnicofs ${file} ${outname} ${i} |sed '/^$/d'| awk NR | sort -nr| awk 'NR==1'
. Вам не нужно 5 процессов, чтобы удалить пустые строки, подсчитать оставшиеся, отсортировать численно в обратном порядке, а затем вывести первую строку..sort -nr | head -n1
должно сделать.