Como Grep segunda palavra no arquivo de configuração usando o parâmetro?

0

Atualmente estou construindo um script para registros da região do grep no arquivo de configuração com base no parâmetro e, em seguida, estou criando um arquivo de texto com essa saída e estou lendo o caminho do arquivo de origem nesse arquivo de saída. Agora eu preciso passar mais um parâmetro como o módulo baseado em que ele tenha que criar um arquivo de texto.

Meu script :

#!/bin/bash

SOURCE_CONF="./test.properties"

#input region name
region="$1"
echo $region
cwd=$(pwd)
calu=$(grep $region test.properties > ab.txt)

IFS=$'\n'

#loop to read the config one line at a time
while read p; do
    echo $p

    a=($(echo "$p" | tr '|' '\n'))
    echo "Region is:" "${a[0]}"
    echo "path is:""${a[3]}"
    path="${a[3]}"
    #remove white space before path
    echo $cwd
    NO_LEAD_SPACE="$(echo -e $path | tr -d '[:space:]')"
    echo "path is:"$NO_LEAD_SPACE
    # change to path spacified in the config file
    sh -c 'cd $NO_LEAD_SPACE && echo "in the subshell" && echo $pwd && echo "exit subshell" && exec pwd'
    echo $cwd
    echo "--------------------"
done < ab.txt

echo "abc"

Meu arquivo de configuração :

region | Module |country code | filepath |filename


APJ | WDMD | MYS |/c/Users/vattikun/desktop | MYS*ADPGV*.XML
APJ | WDED | EUR|/c/Users/vattikun/desktop/Payroll Support | EUR*ADPGV*.XML

APJ | WDMD | RER|/c/Users/vattikun/desktop/Payroll Support | RER*ADPGV*.XML

APJ | WDJD | EYZ|/c/Users/vattikun/desktop/Payroll Support | EYZ*ADPGV*.XML


EMA | WDMD | AUS|/c/Users/vattikun/desktop | AUS*ADPGV*.XML
EMA | WDMD | AYS| /c/Users/vattikun/desktop | AYS*ADPGV*.XML

AMS | WDMD |ITI| /c/Users/vattikun/desktop | ITI*ADPGV*.XML
AMS |WDMD |AYS| /c/Users/vattikun/desktop | AYS*ADPGV*.XML

ETIME | WDMD |ADP /c/Users/vattikun/desktop | ADP_WDET_JOBCODE*.XML
ETIME | WDMD |AEP| /c/Users/vattikun/desktop | AEP_WDET_JOBCODE*.XML
    
por saranath 29.06.2018 / 06:51

1 resposta

0

Para responder à pergunta específica que você fez, inicie sua expressão de pesquisa com um padrão que ignorará um campo:

module="$2"
/bin/grep "^[^|]*| *${module}\>" test.properties

Para quebrar isso:

^      Start of line
[^|]*  0 or more non-separator characters
|      A field separator
 *     0 or more spaces
${module}  Switch from single- to double-quotes to interpolate variable name
\>    End of a word ("\>" becomes '\>' when shell parses it)

Mas é melhor usar algo como awk ou perl :

awk -F' *\| *' -v module="$module" '$2 == module' test.properties

A longo prazo, pode ser melhor usar um formato conhecido como CSV e ferramentas para trabalhar com ele.

    
por 29.06.2018 / 19:36