как awk шаблон как переменную и зациклить результат? - PullRequest
0 голосов
/ 19 апреля 2019

Я назначаю ключевое слово как переменную, и мне нужно получить awk из файла, используя эту переменную и цикл. Файл содержит миллионы строк.

Я попробовал код ниже.

   DEVICE="DEV2"
    while read -r line
    do
    echo $line

    X_keyword=`echo $line | cut -d ',' -f 2  | grep -w "X" |  cut -d '=' -f2`

   echo $X_keyword

   done <<< "$(grep -w $DEVICE $config)"

   log="Dev2_PRT.log"

   while read -r file
    do

        VALUE=`echo $file | cut -d '|' -f 1`
        HEADER=`echo $VALUE | cut -c 1-4`
        echo $file


        if [[ $HEADER = 'PTR:' ]]; then

            VALUE=`echo $file | cut -d '|' -f 4`
            echo $VALUE
            XCOORD+=($VALUE)
            ((X++))
        fi

    done <<<  "awk /$X_keyword/ $log"

ожидаемый результат:

содержание файлов журналов много ниже: PTR: 1 | 2 | 3 | 4 | X_keyword PTR: 1 | 2 | 3 | 4 | Y_rest .....

Отфильтруйте ключевое слово X_ и получите поле № 4.

1 Ответ

2 голосов
/ 19 апреля 2019

К сожалению, ваш сценарий оболочки - просто неправильный подход к этой проблеме (см. https://unix.stackexchange.com/q/169716/133219 по некоторым причинам), поэтому вам следует отложить его и начать все сначала.

Чтобы продемонстрировать решение, давайте создадим пример входного файла:

$ seq 10 | tee file
1
2
3
4
5
6
7
8
9
10

и переменную оболочки для хранения регулярного выражения, представляющего собой список символов из символов 5, 6 или 7:

$ var='[567]'

Теперь,учитывая приведенные выше данные, вот решение для g/re/p pattern as variable and count how many results:

$ awk -v re="$var" '$0~re{print; c++} END{print "---" ORS c+0}' file
5
6
7
---
3

Если это не все, что вам нужно, отредактируйте ваш вопрос, чтобы уточнить ваши требования и предоставить краткий, тестируемый пример ввода и ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...