如何切换文本行的内容

时间:2012-10-27 02:41:55

标签: bash sorting edit

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

1:iowemiowe093j4384d
2:98j238d92dd2d
3:98h2d078h78dbe0c
(continues in the same manner)

我需要反转这两行的顺序,因此输出为:

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3

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

3 个答案:

答案 0 :(得分:6)

awk -F: '{print $2":"$1}' input-file

awk -F: '{print $2,$1}' OFS=: input-file

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

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

或者

perl -F: -anE '$\=:; say reverse @F' input-file

perl -F: -anE 'say join( ':',  reverse @F)' input-file

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

答案 1 :(得分:0)

使用GNU sed的一种方式:

sed -ri 's/([^:]+):(.*)/\2:\1/' file.txt

结果:

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3

答案 2 :(得分:0)

Pure Bash几乎与William Pursell的awk解决方案一样快,但不那么优雅:

paste -d: <(cut -d: -f2 input-file) <(cut -d: -f1 input-file)