Concatenando campos de linhas com diferentes números de campos

5

Dada entrada como esta:

x y a b c t
p q w w t
a b c d
p q r

Gostaria de concatenar campos do campo 3 até, mas não incluindo o último. Se o campo 3 for o último campo, gostaria de inserir um marcador de posição. Então, dada a entrada acima, esta é a saída preferida:

x y a_b_c t
p q w_w t
a b c d
p q _ r

O resultado final é que todas as linhas terão quatro campos. Isso é possível em awk ou corte ou sed, etc?

    
por Yimin Rong 18.11.2013 / 22:34

2 respostas

8
awk '{
  s = m = ""
  for (i = 3; i < NF; i++) {m = m s $i; s = "_"}
  if (m == "") m = "_"
  print $1, $2, m, $NF}'
    
por 18.11.2013 / 22:52
4

Versão sed alternativa para diversão:

sed -r 's/  */_/g; s/_/ /; s/_/ /  # convert all to _, unconvert 1st 2
        ts;:s; s/(.*)_/ / ;t     # if a trailing third exists unconvert it
        s/ / _ /2                  # else add one
'
    
por 19.11.2013 / 06:19