Valores correspondentes dentro das colunas

1

Eu tenho um arquivo de texto delimitado por tabulação contendo mais de 1500 linhas.

input.txt

id   sno1   
EN1  Nucus_2158_mri_1/2_Co_1.0_Le_3104
EN2  Nucus_2158_mri_4/2_Co_1.0_Le_3104
EN3  Nucus_2158_mri_1/2_Co_1.0_Le_3104
EN4  Nucus_2158_mri_1/2_Co_1.0_Le_3106
EN5  Nucus_2158_mri_1/2_Co_1.0_Le_3104
EN6  Nucus_2159_mri_1/2_Co_1.0_Le_3104

Eu quero obter correspondência exata na coluna (sno1), capturando valores entre colchetes ( Nucus_{2158}_mri_{1/2}_Co_1.0_Le_{3104} ) e imprima a lista de ids correspondentes. Qualquer ajuda no awk / sed apreciada.

output.txt

Nucus_2158_mri_1/2_Co_1.0_Le_3104 EN1,EN3,EN5
    
por jack 28.07.2012 / 00:07

2 respostas

2

Supondo que você queira dizer que o segundo elemento inteiro é o mesmo em cada caso, você pode usá-lo como a chave em uma matriz associativa. Aqui está um exemplo de awk que se baseia nisso:

awk '
/^EN/ {
  if(H[$2] == "")
    H[$2] = $1
  else
    H[$2] = H[$2]","$1
}
END {
  for(key in H)
    print key, H[key]
}' infile

Saída:

Nucus_2158_mri_4/2_Co_1.0_Le_3104 EN2
Nucus_2159_mri_1/2_Co_1.0_Le_3104 EN6
Nucus_2158_mri_1/2_Co_1.0_Le_3104 EN1,EN3,EN5
Nucus_2158_mri_1/2_Co_1.0_Le_3106 EN4
    
por 28.07.2012 / 02:09
2

passa as três chaves usando variáveis de linha de comando awk (nomeadas primeiro, segundo e terceiro no exemplo abaixo)

awk -v first=2158 -v second=1/2 -v third=3104 
'$2 == "Nucus_"first"_mri_"second"_Co_1.0_Le_"third{print($2,$1)}' input.txt      
| awk '{deleter=$1; gsub(deleter, "", $0);} NR != 1 {deleter=""}{print(deleter" "$0)}' 
| sed -e 's/^\s\+//g' | sed ':a;N;$!ba;s/\n/,/g'
    
por 28.07.2012 / 02:46

Tags