2017-02-08 12 views
0

EDIT 2: Я решил переписать это, чтобы лучше изобразить результаты.Bash Shell Scripting назначает новые переменные для вывода поиска grep

В настоящее время я использую этот код, чтобы вывести список файлов в различных каталогах:

for file in /directoryX/*.txt 

do 
    grep -rl "Annual Compensation" $file 
done 

Выходной сигнал показывает все файлы, которые имеют определенную таблицу я пытаюсь извлечь в макете, как это:

txtfile1.txt 
txtfile2.txt 
txtfile3.txt 

Я использую эту команду AWK на каждом отдельном файле .txt извлечь таблицу, а затем отправить его в формате CSV:

awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' txtfile1.txt > txtfile1.csv 

Моя цель - найти команду, которая будет запускать мою команду awk по каждому файлу в списке все сразу. Спасибо тем, кто уже представил предложения.

+1

Я не могу понять ваше требование. Какие файлы CSV будут содержать? – codeforester

+0

Извините, я не могу понять ваш вопрос. Можете ли вы предоставить больше контекста и более подробно, особенно о желаемом выходе/эффекте? – Dario

+0

Сначала я попытался использовать инвертированные апострофы ('\ '') в строке, например output = \' grep -rl "Annual Compensation" $ file \ ", а затем посмотреть, что я могу сделать с $ output. –

ответ

0

Если я понимаю, что вы просите, я думаю, что вы хотите сделать, это добавить строку после Grep, или вместо Grep, который говорит:

awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' $file > ${file}_new.csv 

Когда вы говорите ${file}_new.csv, его расширяет переменную file, затем добавляет к ней строку «_new.csv». Это то, за что ты стреляешь, не так ли?

0

Изменение кода:

for file in /directoryX/*.txt 
do 
    files+=($(grep -rl "Annual Compensation" $file)) 
done 

for f in "${files[@]}";do 
    awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' "$f" > "$f"_new.csv 
done 

Альтернативный код:

files+=($(grep -rl "Annual Compensation" /directoryX/*)) 
for f in "${files[@]}";do 
awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' "$f" > "$f"_new.csv 

В обоих случаях результаты GREP и результаты AWK не проверено мной - это просто копия - паста вашего код.