我有一个大文件(大约39,000行文本),包含以下内容:
1:iowemiowe093j4384d
2:98j238d92dd2d
3:98h2d078h78dbe0c
(continues in the same manner)
我需要反转这两行的顺序,因此输出为:
iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3
相反,我尝试使用cut来做到这一点但是却无法让它正常运行(这是在bash环境中),最好的方法是什么?
答案 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)