【问题标题】:how to take substring in ksh如何在 ksh 中获取子字符串
【发布时间】:2014-05-29 09:39:02
【问题描述】:

我有一个名为“output.txt”的文件,其中包含以下格式的数据:

400949703|2000025967912|20130614010652|20130614131543
355949737|2144050263|20120407100407|20120407101307
355499738|2144500262|20110911010901|20110911135601

我正在执行如下所示的awk命令:

awk -F"|" '{num1="`echo $3| cut -c1-8`"; print $num1}' output.txt

我的预期输出是:

20130614
20120407
20110911

但我得到的输出实际上是输入。

400949703|2000025967912|20130614010652|20130614131543
355949737|2144050263|20120407100407|20120407101307
355499738|2144500262|20110911010901|20110911135601

无法找出原因。我的任务是比较第 3 列和第 4 列中的第一个 8 个字符。但只停留在这部分。

专家,请帮助我找到我失踪的地方。

【问题讨论】:

    标签: unix awk substring ksh cut


    【解决方案1】:

    使用cut 两次怎么样?

    $ cut -d'|' -f4 file | cut -c-8
    20130614
    20120407
    20110911
    
    • 首先根据|定界符获取第4个字段。
    • 其次获取前8个字符(注意cut -c-8和你的cut -c1-8是一样的)

    【讨论】:

      【解决方案2】:

      您正在将 bash 与 awk 混合使用,一个工具就足够了:

      awk -F\| 'a=substr($3, 1, 8){if(a==substr($4, 1, 8)){print a}}' output.txt
      

      获取第 3 列和第 4 列的子字符串,比较它们,如果没问题就打印出来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-25
        • 2014-08-24
        • 2016-08-13
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2011-10-04
        相关资源
        最近更新 更多