【问题标题】:How to extract column in text file in bash如何在bash中提取文本文件中的列
【发布时间】:2020-03-31 02:51:11
【问题描述】:

我有一个文本文件,格式如下,我只想捕获.txt 之后的数字。我做了awk '{print $2}' filename,它给了我错误的结果。

对于某些行,它给了我: 而不是数字。例如,在第二行中,我将得到: 而不是914

还有其他方法可以提取.txt 之后的数字吗?我不是指rgbpart 中的数字。

image/Subject01.txt:1310 : image/Subject01/Scene4/Color/rgb7
image/Subject01.txt: 914 : image/Subject01/Scene4/Color/rgb3
...

【问题讨论】:

    标签: bash text awk


    【解决方案1】:

    您忘记指定自定义字段分隔符。喜欢

    awk -F ' *: *' '{print $2}' file
    

    【讨论】:

      【解决方案2】:

      你也可以使用剪切命令

      cut -d ':' -f 2 filename
      

      这会将 [d] 分隔符设置为 [:],然后将采用 [2]nd [f] 字段

      【讨论】:

      • 这样你也会得到空格而不是数字本身。我会这样做: cut -d ':' -f 2 xxx | sed -e "s/ //g"。我非常喜欢您的解决方案,因为与具有大量功能的 gawk 相比,cut 和 sed 等工具的内存占用更少。
      【解决方案3】:

      请您尝试关注一下。

      awk '
      match($0,/\.txt:[^:]*/){
        val=substr($0,RSTART,RLENGTH)
        sub(/[^0-9]+/,"",val)
        print val
      }
      ' Input_file
      

      第二个解决方案:使用字段分隔符。

      awk 'BEGIN{FS="[.:]"} $2=="txt"{print $3+0}'  Input_file
      

      【讨论】:

        【解决方案4】:

        您可以为此使用 GNU grep:

        $ grep -Po '\.txt: *\K[[:digit:]]+' infile
        1310
        914
        

        -P 启用与 Perl 兼容的正则表达式(\K 需要),-o 仅保留匹配项。

        正则表达式查找字符串.txt:,后跟任意数量的空格(包括零);这部分匹配被丢弃(\K),然后我们匹配尽可能多的数字。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-12
          • 2011-01-02
          • 1970-01-01
          • 2016-12-14
          相关资源
          最近更新 更多