美文网首页
奇偶行合并,python命令行研究和awk简易方法

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

作者: 六十三63 | 来源:发表于2018-04-09 21:51 被阅读0次

    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 "<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
    

    一样不对,原因是什么我不知道啦,反正循环写法是无法使用了,只能换一种思路去解决了,搜索了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简易方法

          本文链接:https://www.haomeiwen.com/subject/zajwhftx.html