2012-06-27 7 views
2

Я собрал пакетный скрипт для создания панорам с использованием инструментов командной строки, используемых 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 

Есть более простой способ сделать это?

ответ

2

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

+0

Очень элегантный, совершающий в одной строке, что это у меня ушло восемь сделать ... – Jason

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, и я не уверен, что это то, что вам нужно.

2

Чтобы ответить на вопрос о получении первого или последнего количества строк, вы можете использовать head и tail, например. :

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

Но вместо поиска 12-й строки, как насчет поиска семантически для любой строки, содержащей ядра. Например, некоторые машины могут иметь несколько ядер, так что вы можете подвести итоги:

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

+1 для заметив возможность нескольких ядер. – bcelary

+0

AWK может сделать все: 'awk '/ cores/{s + = $ NF} END {print s}'/proc/cpuinfo' –

0

И если CPUInfo меняет свой формат;)? Возможно, что-то вроде этого будет лучше:

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

И не забудьте суммировать сердечники. Шахта имеет как 12 или 16 из них;)

2
count=$(getconf _NPROCESSORS_ONLN) 

см getconf(1) и sysconf(3) constants.

В соответствии с руководством по Linux, _SC_NPROCESSORS_ONLN «не может быть стандартным». Я предполагаю, что для этого требуется glibc или даже система Linux. Если это не сработает, я бы, наверное, посмотрел на /sys/class/cpuid (возможно, что-то лучше?) По разбору /proc/cpuinfo. Ничто из перечисленного не является полностью переносимым.

0

unsure, что вы пытаетесь сделать, и почему то, что ormaaj сказал выше, тоже не сработает. мой инстинкт, основанный на вашем описании, был бы намного проще по строкам.

grep processor /proc/cpuinfo | wc -l 
+0

Стоит упомянуть, что константа в моем ответе не переносима (согласно man-странице Linux) , (Тогда это procfs). Прояснит. – ormaaj

Смежные вопросы