如何切换文本行的内容

lac*_*991 0 sorting bash edit

我有一个大文件(大约39,000行文本),包含以下内容:

1:iowemiowe093j4384d
2:98j238d92dd2d
3:98h2d078h78dbe0c
(continues in the same manner)
Run Code Online (Sandbox Code Playgroud)

我需要反转行的两个部分的顺序,因此输出将是:

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3
Run Code Online (Sandbox Code Playgroud)

相反,我已经尝试使用cut来做到这一点但是却无法让它正常运行(这是在bash环境中),最好的方法是什么?

Wil*_*ell 6

awk -F: '{print $2":"$1}' input-file
Run Code Online (Sandbox Code Playgroud)

要么

awk -F: '{print $2,$1}' OFS=: input-file
Run Code Online (Sandbox Code Playgroud)

如果您有两个以上的字段:

awk -F: '{print $NF; for(i=NF-1; i; i-- ) print ":"$i }' input-file
Run Code Online (Sandbox Code Playgroud)

要么

perl -F: -anE '$\=:; say reverse @F' input-file
Run Code Online (Sandbox Code Playgroud)

要么

perl -F: -anE 'say join( ':',  reverse @F)' input-file
Run Code Online (Sandbox Code Playgroud)

(这两个perl解决方案都未经过测试,我认为存在缺陷,每个都需要chop $F[-1]或类似地删除输入中的换行符.)