奇偶行合并,python命令行研究和awk简易方法

python命令行学习了一下就想拿这个锤子去敲所有的钉子,然而事实证明还是太年轻。

发现Python2和python3在利用循环时还有些不同。。。

需求是一个文本,把奇偶行合并重新输出

windows的python3下

PS C:\Users\Administrator\Desktop> gc .\testfile.txt
host1
121234
host2
121235
host3
121236
host4
121237
host5
121238
host6
121239
host7
121240
host8
121241
host9
121242
host10
121243
PS C:\Users\Administrator\Desktop> python -c "file=open('testfile.txt','r');content=file.read();conlist=content.split('\n');[print(conlist[i] + ' : ' + conlist[i+1]) for i in range(0,len(conlist),2)]"
host1 : 121234
host2 : 121235
host3 : 121236
host4 : 121237
host5 : 121238
host6 : 121239
host7 : 121240
host8 : 121241
host9 : 121242
host10 : 121243

但是在linux的python2下面,相同的语法是不对的

[vagrant@amainst perltest]$ cat testfile
host1
121234
host2
121235
host3
121236
host4
121237
host5
121238
host6
121239
host7
121240
host8
121241
host9
121242
host10
121243
[vagrant@amainst perltest]$ python -c "file=open('testfile','r');content=file.read();conlist=content.split('\n');[print conlist[i] + ' : ' + conlist[i+1] for i in range(0,len(conlist),2)]"
  File "", line 1
    file=open('testfile','r');content=file.read();conlist=content.split('\n');[print conlist[i] + ' : ' + conlist[i+1] for i in range(0,len(conlist),2)]
                                                                                   ^
SyntaxError: invalid syntax

去掉[]符号试试

[vagrant@amainst perltest]$ python -c "file=open('testfile.txt','r');content=file.read();conlist=content.split('\n');print conlist[i] + ' : ' + conlist[i+1] for i in range(0,len(conlist),2)"
  File "", line 1
    file=open('testfile.txt','r');content=file.read();conlist=content.split('\n');print conlist[i] + ' : ' + conlist[i+1] for i in range(0,len(conlist),2)
                                                                                                                            ^
SyntaxError: invalid syntax

一样不对,原因是什么我不知道啦,反正循环写法是无法使用了,只能换一种思路去解决了,搜索了commandLineFu这个命令行网站,发现循环的写法用的是python的join方法,终于成功

[vagrant@amainst perltest]$ python -c "file=open('testfile','r');content=file.read();conlist=content.split('\n');conlist.remove('');print '\n'.join(conlist[i] + ' : ' + conlist[i+1] for i in range(0,len(conlist),2))"
host1 : 121234
host2 : 121235
host3 : 121236
host4 : 121237
host5 : 121238
host6 : 121239
host7 : 121240
host8 : 121241
host9 : 121242
host10 : 121243

以后碰到python2环境的时候,要装逼命令行python解决问题,循环只能用join了。

至于标题说的awk简易方法,awk有个保留字getline,这样就是很简单的一个写法。

[vagrant@amainst perltest]$ awk '{getline a;print $0" : "a}' testfile
host1 : 121234
host2 : 121235
host3 : 121236
host4 : 121237
host5 : 121238
host6 : 121239
host7 : 121240
host8 : 121241
host9 : 121242
host10 : 121243

在文本处理中,知道每个工具的方法处理起来更快,但如果只专精于一项,那就请顾及版本的问题。

你可能感兴趣的:(奇偶行合并,python命令行研究和awk简易方法)