从文件中提取文本的简单方法

时间:2012-06-27 14:13:53

标签: linux bash text-processing

我已经整理了一个批处理脚本,使用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

有更简单的方法吗?

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:2)

count=$(getconf _NPROCESSORS_ONLN)

请参阅getconf(1)sysconf(3) constants

根据Linux联机帮助页,_SC_NPROCESSORS_ONLN“可能不是标准”。我的猜测是这需要glibc甚至Linux系统。如果这不起作用,我可能会在解析/sys/class/cpuid时考虑/proc/cpuinfo(也许有更好的东西?)。以上都不是完全便携的。

答案 3 :(得分:1)

有很多方法:

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

等等。

但我必须注意,您只接受/proc/cpuinfo第一部分中的信息,我不确定这是您所需要的。

答案 4 :(得分:0)

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

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

确保核心总和。我的有12或16个;)

答案 5 :(得分:0)

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

grep processor /proc/cpuinfo  | wc -l