Como posso trocar caracteres entre dois pontos?

Como posso trocar caracteres entre dois pontos?

Estou tentando trocar caracteres entre dois pontos, de modo que cada lado substitua um ao outro.

Exemplo: entrada

1: Hello
2: World
3: I
4: am 
5: Brendan

Saída:

Hello: 1
World: 2
I: 3
am: 4
Brendan: 5

Tentei usar cut e sed, mas não consegui encontrar um método correto.

Responder1

Você pode tentar issoawk

awk 'BEGIN{FS=OFS=": "}{print $2, $1}' file.txt 

Ou sed com isso tem uma -Eopção.

sed -E 's/(.+): (.+)/\2: \1/' file.txt 

Ou uma solução shell mais lenta, se não a mais lenta.

while IFS=": " read -r first second; do
  printf '%s: %s\n' "$second" "$first"
done < file.txt 

Responder2

Tente isto independentemente da entrada ser uma ou várias linhas:

awk 'BEGIN{FS="[: ]*"; OFS=":" }{for (i=2; i<=NF; i+=2) printf "%s: %s ", $i, $(i-1); print _}' file

informação relacionada