0

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

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

我需要颠倒两行的顺序,所以输出将是:

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3

相反,我尝试使用 cut 来执行此操作,但无法使其正常运行(这是在 bash 环境中),最好的方法是什么?

4

3 回答 3

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

或者

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

如果您可能有超过 2 个字段:

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]或类似的来删除输入中的换行符。)

于 2012-10-27T02:43:40.950 回答
0

一种使用方式GNU sed

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

结果:

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3
于 2012-10-27T03:29:54.387 回答
0

纯 Bash,几乎与 William Pursell 的 awk 解决方案一样快,只是没有那么优雅:

paste -d: <(cut -d: -f2 input-file) <(cut -d: -f1 input-file) 
于 2012-10-27T10:22:10.223 回答