コロンを挟んで文字を交換するにはどうすればよいでしょうか?

コロンを挟んで文字を交換するにはどうすればよいでしょうか?

コロンを挟んで文字を交換し、どちらかの側が互いに置き換わるようにしたいと考えています。

例: 入力

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

出力:

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

cut と sed を使ってみましたが、正しい方法を見つけることができませんでした。

答え1

これを試すことができますawk

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

または、-Eオプションがある sed を使用します。

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

または、最も遅いシェル ソリューションではないにしても、より遅いシェル ソリューションです。

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

答え2

入力が 1 行か複数行かに関係なく、これを試してください。

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

関連情報