Получить значение по умолчанию с помощью grep -e? - PullRequest
1 голос
/ 02 ноября 2011

Я анализирую текстовые файлы, ища определенные записи, например, так

grep -e 'Model' -e 'Manufacturer' -e 'Man Date' -e 'SW Version' -e' SW Name' -e 'HW Version' -e 'Receiver ID' JGMDTV356.HDD

Это дает мне вывод примерно так

Model         = HR24
Manufacturer  = 100
Man Date      = 04/14/2010
SW Version    = 4D1
HW Version    = 2.3
Receiver ID   = 035635905389
Model         = WDCWD5000AVVS-63M8B0 (Dragonfly-0)

Проблема в том, что некоторые файлы не имеют одинаковыеколичество полей.Как я могу сделать что-то подобное?

Model         = HR24
Manufacturer  = 100
Man Date      = N/A
SW Version    = 4D1
HW Version    = N/A
Receiver ID   = N/A
Model         = N/A

Можно ли это сделать?

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Как уже упоминал Матфей, ​​то, что вы пытаетесь сделать, выходит за рамки предполагаемого использования grep. Awk был создан для такого типа вещей и доступен в большинстве дистрибутивов Linux (gawk - это реализация GNU) и даже во многих встроенных системах Linux. здесь есть хороший учебник, который займет меньше часа и научит вас практически всему, что вам нужно знать.

Вот код awk, который вам понадобится для решения вашей проблемы:

#!/bin/awk -f                                                                                             

BEGIN {
    tokens["Model"] = 0
    tokens["Manufacturer"] = 0
    tokens["Man Date"] = 0
    tokens["SW Version"] = 0
    tokens["HW Version"] = 0
    tokens["Receiver ID"] = 0
}

{
    for (token in tokens){
        if ($1 == token){
            print $0;
            tokens[$1]++;
        }
    }
}

END {
    for (token in tokens){
        if( tokens[token] == 0){
            printf("%-13s = NA\n" , token)
        }
    }
}

Сохраните это в tmp.awk и добавьте разрешения на выполнение в tmp.awk.

cat <your file> | ./tmp.awk

Это напечатает то, что вы хотите.

1 голос
/ 02 ноября 2011

Итак, если файл JGMDTV356.HDD не содержит шаблон соответствия строк FOO, вы хотите grep распечатать FOO = N/A? grep не может этого сделать. Возможно, вы захотите взглянуть на gawk для обработки текстовых файлов, которая более сложна, чем то, что может обрабатывать grep.

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