【问题标题】:Simpler way of extracting text from file从文件中提取文本的更简单方法
【发布时间】:2012-06-29 00:06:36
【问题描述】:

我已经编写了一个批处理脚本来使用 Hugin 使用的命令行工具生成全景图。其中几个工具的一个有趣之处是它们允许多核使用,但必须在命令中标记此选项。

到目前为止我的想法:

#get the last fields of each line in the file, initialize the line counter
results=$(more /proc/cpuinfo | awk '{print ($NF)}')
count=0

#loop through the results till the 12th line for cpu core count
for result in $results; do
  if [ $count == 12 ]; then
    echo "Core Count: $result"
  fi
  count=$((count+1))
done

有没有更简单的方法来做到这一点?

【问题讨论】:

    标签: linux bash text-processing


    【解决方案1】:

    result=$(awk 'NR==12{print $NF}' /proc/cpuinfo)

    【讨论】:

      【解决方案2】:

      有很多方法:

      head -n 12 /proc/cpuinfo | tail -1 | awk -F: '{print $2}'
      grep 'cpu cores' /proc/cpuinfo | head -1 | awk -F: '{print $2}'
      

      等等。

      但我必须注意,您仅从/proc/cpuinfo 的第一部分获取信息,我不确定这是否是您所需要的。

      【讨论】:

        【解决方案3】:

        要回答有关获取第一/最后这么多行的问题,您可以使用headtail,例如:

        cat /proc/cpuinfo | awk '{print ($NF)}' | head -12 | tail -1
        

        但是,与其搜索第 12 行,不如从语义上搜索包含核心的任何行。例如,某些机器可能有多个核心,因此您可能需要对结果求和:

        cat /proc/cpuinfo | grep "cores" | awk '{s+=$NF} END {print s}'
        

        【讨论】:

        • AWK 无所不能:awk '/cores/ {s+=$NF} END {print s}' /proc/cpuinfo
        【解决方案4】:

        如果 cpuinfo 改变了它的格式 ;) ?也许这样的事情会更好:

        cat /proc/cpuinfo|sed -n 's/cpu cores\s\+:\s\+\(.*\)/\1/p'|tail -n 1
        

        并确保对核心求和。我的有 12 或 16 个;)

        【讨论】:

          【解决方案5】:
          count=$(getconf _NPROCESSORS_ONLN)
          

          getconf(1)sysconf(3) constants

          根据 Linux 手册页,_SC_NPROCESSORS_ONLN“可能不是标准的”。我的猜测是这需要 glibc 甚至是专门的 Linux 系统。如果这不起作用,我可能会查看/sys/class/cpuid(也许有更好的东西?)而不是解析/proc/cpuinfo。以上都不是完全可移植的。

          【讨论】:

            【解决方案6】:

            不确定您要做什么以及为什么上面所说的 ormaaj 也不起作用。根据你的描述,我的直觉会更简单。

            grep processor /proc/cpuinfo  | wc -l
            

            【讨论】:

            • 值得一提的是,我的答案中的常量是不可移植的(根据 Linux 手册页)。 (那么,procfs 也是如此)。会澄清的。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-29
            • 1970-01-01
            • 1970-01-01
            • 2013-11-26
            • 1970-01-01
            相关资源
            最近更新 更多