Exibe uma linha em um arquivo de texto se a variável corresponder a uma parte na linha?

1

Estou fazendo um verificador de estoque. Eu tenho um arquivo com todas as trocas da NYSE e suas descrições. As descrições começam na primeira guia, digite o arquivo. A formatação do arquivo é assim:

A       Agilent Technologies
AA      Alcoa Inc
AA-B    Alcoa Inc.
AAC     Aac Holdings Inc.
AAN     Aaron's Inc
AAP     Advance Auto Parts Inc
AAT     American Assets Trust
AAV     Advantage Oil & Gas Ltd
AB      Alliance Capital Management L.P.
ABB     Abb Ltd
ABBV    Abbvie Inc. Common Stock
ABC     Amerisourcebergen Corp
ABEV    Ambev S.A.
...

Eu quero que assim, quando um estoque é inserido, ele mostra a descrição do estoque com isso, assim (entrada stockchecker AB ):

Stock: AB (NYSE) - Alliance Capital Management L.P.

Eu também tenho um arquivo com todas as trocas do NASDAQ.

Como posso verificar os dois arquivos para ver se ele corresponde ao primeiro argumento (o símbolo de ação inserido) e exibir a descrição? (Os arquivos de texto são denominados NYSE.txt e NASDAQ.txt ) Código (se necessário):

#!/bin/bash
stock=$1
touch info.txt # create info.txt if missing
touch raw-info.txt # create raw-info.txt if missing
echo $( wget http://www.google.com/finance/info?q=NASDAQ%3a$stock -q -O -) > raw-info.txt # get the information from Google Finance and write it to info.txt
tr "\" ," "\n" < raw-info.txt > info.txt # split the information from Google Finance into separate lines
##########set stock variables############
stockID=$(sed '8q;d' < info.txt)         #
stockTicker=$(sed '16q;d' < info.txt)    #
stockCorp=$(sed '24q;d' < info.txt)      #
stockPrice=$(sed '48q;d' < info.txt)     #
lastUpdate=$(sed '73q;d' < info.txt)     #
priceChange=$(sed '90q;d' < info.txt)    #
percentChange=$(sed '106q;d' < info.txt) #
previousClose=$(sed '130q;d' < info.txt) #
ahPrice=$(sed '151q;d' < info.txt)       #
ahLUpdate=$(sed '162q;d' < info.txt)     #
ahPriceChange=$(sed '171q;d' < info.txt) #
ahPctChange=$(sed '187q;d' < info.txt)   #
#########################################
#ah color formatting
linecount=$(wc -l info.txt)
linecount=${linecount#?} #remove tab character from wc -l
linecount=${linecount%?????????} #remove info.txt from wc -l
if [[ $linecount -gt 150 ]] ; then
    if [[ ${ahPriceChange:0:1} == "+" ]] ; then ahPriceChange=${ahPriceChange#?} ; ahPriceChange=$(printf "\e[32m+$ahPriceChange\e[0m") ; fi
    if [[ ${ahPriceChange:0:1} == "-" ]] ; then ahPriceChange=${ahPriceChange#?} ; ahPriceChange=$(printf "\e[31m-$ahPriceChange\e[0m") ; fi
    if [[ ${ahPctChange:0:1} != "-" ]] ; then ahPctChange=$(printf "\e[32m+$ahPctChange%%\e[0m") ; fi
    if [[ ${ahPctChange:0:1} == "-" ]] ; then ahPctChange=${ahPctChange#?} ; ahPctChange=$(printf "\e[31m-$ahPctChange%%\e[0m") ; fi
    ah_trades_present="yes"
else
    ah_trades_present="no"
fi
#color formatting
if [[ ${priceChange:0:1} == "+" ]] ; then priceChange=${priceChange#?} ; priceChange=$(printf "\e[32m+$priceChange\e[0m") ; fi
if [[ ${priceChange:0:1} == "-" ]] ; then priceChange=${priceChange#?} ; priceChange=$(printf "\e[31m-$priceChange\e[0m") ; fi
if [[ ${percentChange:0:1} != "-" ]] ; then percentChange=$(printf "\e[32m+$percentChange%%\e[0m") ; fi
if [[ ${percentChange:0:1} == "-" ]] ; then percentChange=${percentChange#?} ; percentChange=$(printf "\e[31m-$percentChange%%\e[0m") ; fi

if [[ $ah_trades_present == "no" ]] ; then
echo    "Google Finance ID:    $stockID                      "
echo    "Stock                 $stockTicker ($stockCorp)     "
echo    "Price                 $stockPrice                   "
echo    "Change:               $priceChange [$percentChange] "
echo    "Previous Close:       $previousClose                "
echo    "Last Update:          $lastUpdate               "
fi
if [[ $ah_trades_present == "yes" ]] ; then
echo    "#################### AFTER HOURS ###################"
echo    "Google Finance ID:    $stockID                      "
echo    "Stock                 $stockTicker ($stockCorp)     "
echo    "Price:                $ahPrice                  "
echo    "Change:               $ahPriceChange [$ahPctChange] "
echo    "Last Update:          $ahLUpdate            "
echo    "Previous Close:       $stockPrice           "
fi
    
por 智障的人 03.07.2015 / 04:03

1 resposta

1

Aqui está uma solução -

    #!/bin/bash
    grep "^$1 " NYSE.txt NASDAQ.txt | sed 's/:/ /' | awk '{printf "Stock %s ( %s ) -  ",$2,$1; for(i=3;i<NF;i++) printf "%s ",$i OFS;if(NF)printf"%s",$NF;printf ORS}'

O primeiro grep pesquisa a linha que começa com o símbolo. O sed substitui o ":" após o nome do arquivo de get output para um espaço em branco. O awk imprime a sentença na ordem que você deseja.

    
por 03.07.2015 / 05:39