python命令行學(xué)習(xí)了一下就想拿這個(gè)錘子去敲所有的釘子,然而事實(shí)證明還是太年輕。
發(fā)現(xiàn)Python2和python3在利用循環(huán)時(shí)還有些不同。。。
需求是一個(gè)文本,把奇偶行合并重新輸出
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 "<string>", 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 "<string>", 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
一樣不對,原因是什么我不知道啦,反正循環(huán)寫法是無法使用了,只能換一種思路去解決了,搜索了commandLineFu這個(gè)命令行網(wǎng)站,發(fā)現(xiàn)循環(huán)的寫法用的是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環(huán)境的時(shí)候,要裝逼命令行python解決問題,循環(huán)只能用join了。
至于標(biāo)題說的awk簡易方法,awk有個(gè)保留字getline,這樣就是很簡單的一個(gè)寫法。
[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
在文本處理中,知道每個(gè)工具的方法處理起來更快,但如果只專精于一項(xiàng),那就請顧及版本的問題。