Цикл команды 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 отделить?

Другие вопросы по тегам