Como cortar as últimas 5 strings em uma coluna específica para todas as linhas

2

Eu tenho um arquivo com várias colunas e linhas, e preciso cortar as últimas 5 strings da minha terceira coluna e imprimi-las em uma coluna extra. Por exemplo:

1 info1 AAAAAAAAAAA
2 info23 TTTTTTTTTT
3 ingo45  ATATATATATATAT
4 info67 GGGYYYYUUUUUUU

Minha saída será:

1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45  ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

Consegui cortar apenas a terceira coluna apenas por:

cat input_file | cut -f3 | grep -o '.\{5\}$' > output_file

Mas quero manter minha tabela original. Alguma sugestão?

    
por Paul 11.10.2017 / 19:41

2 respostas

2

Curtas AWK abordagens:

awk '{ $(NF+1)=substr($NF, length($NF)-4) }1' input-file
  • $NF - o último valor do campo

  • $(NF+1) - torna-se o último campo (após o último campo inicial $NF )

  • length($NF)-4 - obter a posição inicial / deslocamento da fatia 5 -característica

A saída:

1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45 ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

----------

O mesmo pode ser alcançado por meio da substituição de string:

awk '{ sub(/.{5}$/, "& &") }1' input-file
  • /.{5}$/ - corresponde aos últimos cinco caracteres no final do registro

  • & - aponta para a sequência inteira

por 11.10.2017 / 19:43
1

Usando duas instâncias da string de substituição sed & :

$ sed 's/.\{5\}$/& &/' file
1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45  ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU
    
por 11.10.2017 / 19:55

Tags