¿Cómo puedo intercambiar caracteres entre dos puntos?

¿Cómo puedo intercambiar caracteres entre dos puntos?

Estoy buscando intercambiar caracteres a través de dos puntos de modo que ambos lados se reemplacen entre sí.

Ejemplo: entrada

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

Producción:

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

Intenté usar cut y sed pero no pude encontrar un método correcto.

Respuesta1

Puedes probar estoawk

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

O sed con eso tiene una -Eopción.

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

O una solución de shell más lenta, si no la más lenta.

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

Respuesta2

Pruebe esto independientemente de que la entrada sea una o varias líneas:

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

información relacionada