Compare arquivos de texto com grep

0

Digamos que eu tenha dois arquivos, eu quero encontrar um adeus que eu possa fazer com o grep, mas com o que estou lutando é quando eu encontrar um adeus correspondente à próxima linha com a primeira coluna do arquivo 1.

Arquivo1

sss aa 0030 asa bb 0040

Arquivo 2

Hello, goodbye sjkd askdfj al;j asa but no I dont need this sfajkld goodbye sjakdlfja sss saklfj alkjfalskj

algo como

if(line has goodbye && nextline has first column in file 1) print the second column in file 1

    
por user124557 17.03.2015 / 05:45

1 resposta

1

Tente isto:

awk '
  NR==FNR { a[$1] = $2 ; next }
  c && c-- && ($1 in a) { print a[$1] }
  /goodbye/ { c = 1 }
' File1 File2

Como isso funciona:

NR==FNR é uma condição que só é verdadeira ao ler o primeiro arquivo; aqui nós armazenamos em um mapa o segundo campo sob o valor da chave definido pelo primeiro campo. Com a instrução next , nenhuma outra das condições subsequentes será verificada para o primeiro arquivo de dados.

Assim, o restante das condições será verificado apenas para o segundo arquivo. Queremos imprimir o valor mapeado do primeiro arquivo (dependendo da chave do segundo arquivo) se certas condições forem verdadeiras; um sinalizador c foi definido (em caso afirmativo, esse sinalizador será decrementado como 0) e o valor da chave atual já deverá existir como chave (do primeiro arquivo) no mapa a . Finalmente, o sinalizador c será definido se a condição for verdadeira de acordo com o padrão dado.

    
por 17.03.2015 / 06:16