Цикл команды linux с вводом и несколькими каналами
Эта команда работает, но я хочу, чтобы она запускалась для каждого документа (input.txt) в каждом подкаталоге.
tr -d '\n' < input.txt | awk '{gsub(/\. /,".\n");print}' | grep “\[" >> SingleOutput.txt
Код принимает входной файл и делит его на предложения с новыми строками. Затем он находит все предложения, содержащие "[", и выводит предложения в один файл. Я попробовал несколько циклических приемов с помощью циклов find и for, но не смог запустить его в этом примере. Я старался
for dir in ./*; do
(cd "$dir" && tr -d '\n' < $dir | awk '{gsub(/\. /,".\n");print}' | grep “\[" >> /home/dan/SingleOutput.txt);
done;
а также
find ./ -execdir tr -d '\n' < . | awk '{gsub(/\. /,".\n");print}' | grep "\[" >> /home/dan/SingleOutput.txt;
но они не сработали, просто дали мне> оценки. есть идеи?
2 ответа
Попробуй это:
cd $dir
find ./ | grep "input.txt$" | while read file; do tr -d '\n' < $file | awk '{gsub(/\. /,".\n");print}' | grep “\[" >> SingleOutput.txt; done
Это найдет все файлы с именем input.txt в $dir, и будет выполнять то, что, как вы говорите, уже работает, отправит вывод в $dir/SingleOutput.txt.
Почему бы просто так?
tr -d '\n' < */input.txt | awk '{gsub(/\. /,".\n");print}' | grep “\[" >> SingleOutput.txt
Или вы заинтересованы в сохранении результатов для каждого input.txt
отделить?