【问题标题】:shell script to read and print a part of a string用于读取和打印字符串的一部分的 shell 脚本
【发布时间】:2009-09-10 12:21:18
【问题描述】:

大家好,

我有一个输入文件,其中包含多行数字(接近 2000 行)结果如图所示,用逗号隔开。

示例:input.txt

00000000000001303275310752

00000000000001827380519015

00000000000000800081610361

00000000000000449481894004

00000000000000449481894004

00000000000001812612607514

预期结果:newfile.txt

7531075,

8051901,

8161036,

8189400,

8189400,

1260751,

我猜像“sed”之类的东西可以用来解决我的问题,但我不太确定如何实现这一点。我已连接到一台在 Solaris 5.10 上运行的机器,如果有人可以指导我进行简要说明,不胜感激。

问候,

新手。

【问题讨论】:

    标签: shell solaris


    【解决方案1】:

    对于固定宽度输入,试试:

    cut -c19-26 input.txt | sed 's/$/,/'
    

    也就是说,提取输入txt的第19到26个字符,然后用逗号替换行尾。

    如果你有可变长度的行,你需要一些不同的东西。

    【讨论】:

      【解决方案2】:

      您可以使用以下方法截断前导零:

      sed 's/^0*//g'
      

      因此类似于:

      sed 's/^0*//g' input.txt | sed 's/$/,/'
      

      应该可以。

      【讨论】:

      • 虽然是一个有用的技巧,但它并不是发帖者所要求的
      • 感谢 dcruz。值得注意的实用程序。我敢肯定,我将来会寻找这样的东西,试图操纵数据:)
      【解决方案3】:

      试试:

      perl -pe 's/^.*(\d{7})\d$/$1,/' < input.txt
      

      或者如果你不喜欢正则表达式:

      perl -pe '$_ = substr($_,-9,-2) . ",\n"' < input.txt
      

      这适用于任何固定或可变长度的行。

      【讨论】:

      • 感谢亚当,perl 实现.. 也给了我结果,尽管没有“逗号”:D
      【解决方案4】:

      这里有一个python中的解决方案,应该很直观:

      $ cat data2
      00000000000001303275310752
      00000000000001827380519015
      00000000000000800081610361
      00000000000000449481894004
      00000000000000449481894004
      00000000000001812612607514
      
      $ cat digits.py
      import sys
      for line in sys.stdin:
          print '%s,' % (line[-9:-2])
      
      $ python digits.py < data2
      7531075,
      8051901,
      8161036,
      8189400,
      8189400,
      1260751,
      

      【讨论】:

        猜你喜欢
        • 2017-06-29
        • 1970-01-01
        • 2017-12-03
        • 2011-04-14
        • 2017-10-17
        • 1970-01-01
        • 2021-12-31
        • 2020-03-27
        • 1970-01-01
        相关资源
        最近更新 更多