Прочитать файл и сохранить произвольные значения в переменной в скрипте bash - PullRequest
0 голосов
/ 01 октября 2011

Я новичок в bash-скриптинге, и мне трудно разобраться с этой проблемой.У меня есть около двухсот файлов, которые следуют этому шаблону:

ANÁLISE DA GLOSA FUNGICIDA
A ANÁLISE RESULTA EM:
S='Glosa02626354' = "agente que destrói ou previne o crescimento de fungos"
    {antifúngico: O I]antifúngico clássico utilizado no tratamento não previne a disseminação típica da infecção.,
    agente antifúngico: Os resultados sugerem a utilização terapêutica do extrato do limão como I]agente antifúngico na Odontologia.,
    fungicida: A duração do ]fungicida no carpete tem garantia de cinco anos.,
    antimicótico: Os grupos nomearam o I]antimicótico e realizaram campanha de lançamento fictícia, com material técnico de divulgação e brindes.,
    agente antimicótico: Em caso de infecção, deverá ser instituído o uso de um I]agente antimicótico.}

Chave: FUNGICIDA <noun.artifact> 
ILI: 02626354
Sense 1
{02626354} <noun.artifact> antifungal, antifungal agent, fungicide, antimycotic, antimycotic agent -- (any agent that destroys or prevents the growth of fungi)
       => {13935705} <noun.substance> agent -- (a substance that exerts some force or effect)
           => {00005598} <noun.Tops> causal agent, cause, causal agency -- (any entity that causes events to happen)
               => {00001740} <noun.Tops> entity -- (that which is perceived or known or inferred to have its own distinct existence (living or nonliving))

В этом случае я должен хранить следующие значения в фигурных скобках: 'antifúngico', 'agente antifúngico', 'fungicida', 'antimicótico'и «agente antimicótico» в одной переменной.Эти слова, конечно, будут разными в каждом файле.Для сравнения вот еще один файл:

ANÁLISE DA GLOSA VIA ÁPIA
A ANÁLISE RESULTA EM:
S='Glosa02634922' = "estrada da antiga Roma, na Itália, extendendo-se ao sul, de Roma a Brindisi; iniciada em 312 AC"
    {Via Ápia: Toda a I]Via Apia era conhecida quer pela sua extensão, quer pela sua extraordinária beleza.}

Chave: VIA ÁPIA <noun.artifact>
ILI: 02634922 
Sense 1
{02634922} <noun.artifact> Appian Way#1 -- (an ancient Roman road in Italy extending south from Rome to Brindisi; begun in 312 BC)
       => {03390668} <noun.artifact> highway#1, main road#1 -- (a major road for any form of motor transport)
           => {03941718} <noun.artifact> road#1, route#2 -- (an open way (generally public) for travel or transportation)
               => {04387207} <noun.artifact> way#6 -- (any artifact consisting of a road or path affording passage from one place to another; "he said he was looking for the way out")
                   => {00019244} <noun.Tops> artifact#1, artefact#1 -- (a man-made object taken as a whole)
                       => {00016236} <noun.Tops> object#1, physical object#1 -- (a tangible and visible entity; an entity that can cast a shadow; "it was full of rackets, balls and other objects")
                           => {00001740} <noun.Tops> entity#1 -- (that which is perceived or known or inferred to have its own distinct existence (living or nonliving))
                       => {00002645} <noun.Tops> whole#2, whole thing#1, unit#6 -- (an assemblage of parts that is regarded as a single entity; "how big is that part compared to the whole?"; "the team is a unit")
                           => {00016236} <noun.Tops> object#1, physical object#1 -- (a tangible and visible entity; an entity that can cast a shadow; "it was full of rackets, balls and other objects")
                               => {00001740} <noun.Tops> entity#1 -- (that which is perceived or known or inferred to have its own distinct existence (living or nonliving))

Здесь переменная будет иметь только одно значение, строку «Via Ápia».


Обновление :Я нашел способ выделить строки, которые являются релевантными, с помощью некоторого мастера регулярных выражений:

grep ':*\.,' file_name.txt

Вывод этой команды для первого примера:

    {antifúngico: O I]antifúngico clássico utilizado no tratamento não previne a disseminação típica da infecção.,
    agente antifúngico: Os resultados sugerem a utilização terapêutica do extrato do limão como I]agente antifúngico na Odontologia.,
    fungicida: A duração do ]fungicida no carpete tem garantia de cinco anos.,
    antimicótico: Os grupos nomearam o I]antimicótico e realizaram campanha de lançamento fictícia, com material técnico de divulgação e brindes.,

Ответы [ 2 ]

0 голосов
/ 01 октября 2011

Если у вас есть GNU grep, вам может повезти с grep -Po '(?<={)[^:]+(?=:)'

0 голосов
/ 01 октября 2011

Если вы просто хотите присвоить результат вашего соответствия регулярному выражению переменной в bash, то это должно сделать это:

myVar=$(cat file_name.txt|grep ':*\.,')

РЕДАКТИРОВАТЬ:

Это может вас немногоближе:

myVar=$(cat file_name.txt|grep ':*\.,'|./x.pl)

Где x.pl:

#!/usr/bin/perl

while (<STDIN>) {
    my @x = split /,/;

    foreach (@x) {
        print $1 . "\n" if /\{?\W*(.*?)\:/;
    }   
}

Это позволит извлечь 4 слова, которые вы хотите, разделенные символами новой строки.Мне все еще не совсем ясно, если вы этого хотите.

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