проблема с перенаправлением вывода - PullRequest
0 голосов
/ 26 ноября 2009

Я пишу сценарий, который выбирает строки из файлов в каталоге, которые содержат шаблоны $ f1, $ f2 и $ f3, и храню строки, содержащие шаблон, в файле, который я хочу назвать, например, $file_$pattern.xls file1_2.54 Ghz.xls.

#!/bin/bash

#my_script.sh to summarize p-state values

f1="2.54 Ghz"
f2="1.60 Ghz"
f3="800 Mhz"

for f in $f1 $f2 $f3
do
    for file in *.txt  
    do
        grep $f1 $file > ${file}_${f1}.xls
    done
done

Пожалуйста, помогите мне со сценарием.

Ответы [ 3 ]

3 голосов
/ 26 ноября 2009

Две вещи ...

  1. Внутри цикла for используйте $ f вместо $ f1.
  2. Поставьте кавычки около $ f. Пробелы приводят к тому, что bash разрывает строку.

Что-то вроде этого может работать:

#!/bin/bash
#my_script.sh to summarize p-state values

f1="2.54 Ghz"
f2="1.60 Ghz"
f3="800 Mhz"

for f in "$f1" "$f2" "$f3"
do
    for file in *.txt 
    do
    grep "$f" "$file" > "${file}_${f}.xls"
    done
done
0 голосов
/ 26 ноября 2009

вместо

for f in $f1 $f2 $f3

использование

for f in {$f1,$f2,$f3}

и переименуйте ваш $ f1 во внутреннем цикле!

0 голосов
/ 26 ноября 2009

Вы можете делать все в оболочке, без необходимости grep или других внешних инструментов

#!/bin/bash

f1="2.54 Ghz"
f2="1.60 Ghz"
f3="800 Mhz"

for file in *.txt
do
    while read -r line
    do
        case "$line" in
            *"$f1"* ) 
                    echo "$line" >> "${file%txt}_${f1}.xls";;
            *"$f2"* ) 
                    echo "$line" >> "${file%txt}_${f2}.xls";;
            *"$f3"* ) 
                    echo "$line" >> "${file%txt}_${f3}.xls";;
        esac
    done < "$file"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...