【问题标题】:Extracting value from a flat file using shell script使用 shell 脚本从平面文件中提取值
【发布时间】:2015-11-04 16:52:00
【问题描述】:

我正在尝试提取平面文件最后一行括号中的值,例如“最后一行(4)”。这是最后一行,我想提取 4 并将其存储在一个变量中。我已经使用tail 命令提取了最后一行,但现在我无法提取括号之间的值。

请帮忙。

【问题讨论】:

  • 试试| grep -Eo '\(.*\)',如果你想去掉括号,你可以在末尾添加| grep -Eo '[[:alnum:]]*'
  • 最后一行是否总是包含数值?如果是,那么只需使用grep -o '[0-9]*'

标签: shell grep tail flat-file extract-value


【解决方案1】:

使用 awk:

$ cat input
first line
2nd line
last line (4) with some data

$ awk -F'[()]' 'END{print $2}' input
4

【讨论】:

  • 正确的方法,所以+1,但最后读取的记录仅保存在某些awks中的END部分,为了便于携带,您需要使用awk -F'[()]' '{s=$2} END{print s}' input
【解决方案2】:

sed:

sed -n '${s/.*(//;s/).*//;p}' file

【讨论】:

    【解决方案3】:
    l=$(tail -n1 filename); tmp=${l##*(}; tmp=${tmp%)*}; printf "tmp: %s\n" $tmp
    

    输出

    tmp: 4

    以脚本格式编写,您正在使用子字符串删除来修剪所有内容,直到最后一行的第一个 ( 和最后一个 ) 之后的所有内容,只留下 4

    l=$(tail -n1 filename)    ## get the last line
    tmp=${l##*(}              ## trim to ( from left
    tmp=${tmp%)*}             ## trim to ) from right
    printf "tmp: %s\n" $tmp
    

    【讨论】:

      【解决方案4】:

      你可以使用这个脚本。

      在此脚本中,我将最后一行保存在 tmp 文件中,最后将其删除。 括号()之间的数字在变量 WORD 中

       #!/bin/ksh
      
      if test "${DEBUG}" = "Y"
      then
      
         set -vx
      
      fi
      
      tail -1 input>>tmp
      
      
      WORD=`sed -n 's/.*(//;s/).*//;p' tmp`
      
      echo $WORD
      
      rm tmp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-15
        • 2021-06-15
        • 1970-01-01
        • 2017-09-01
        • 2018-06-14
        • 2018-06-29
        • 1970-01-01
        相关资源
        最近更新 更多