2013-07-01 2 views
0

Я пытаюсь написать сценарий, который будет печатать результат использования ЦП и использования памяти в файл csv. Но я хотел бы только напечатать значения, которые лежат в определенных столбцах с именем «CPU», «USERNAME» и «MEMORY».Как напечатать значение столбца с помощью команды awk?

Не могли бы вы рассказать мне, как я могу достичь того же, используя awk-скрипт? Используя awk, я обнаружил, что awk '{print $ 2, $ 5}' печатает значения 2-го и 5-го столбцов. Но я хотел бы напечатать значения, указав вместо имени столбца имя столбца.

Возможно ли это?

Образец сценария я написал:

#!/bin/sh 
#This is a comment 
#This is my first shell script 
echo "System Status Report" 
date 
echo "CPU Utilisation Report" 
prstat -a > CPU.xls 

Выход образца:

PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 
26652 root 22M 9648K sleep 1 0 94:34.26 0.2% gpp/1 
26854 root 708M 697M sleep 3 0 36:23.19 0.1% logscan/1 
25167 oracle 1254M 1225M sleep 1 0 14:07.01 0.0% oracle/10 
NPROC USERNAME SIZE RSS MEMORY TIME CPU 
41 root 1000M 834M 1.1% 143:47.47 0.4% 
60 oracle 72G 70G 99% 65:07.13 0.1% 

Я хотел бы получить следующий вывод в файл:

USERNAME CPU 
root 0.2% 
root 0.1% 
oracle 0.0% 
USERNAME MEMORY 
root 1.1% 
oracle 99% 
+3

Можете ли вы привести пример ввода для своего скрипта? – hek2mgl

+0

@ hek2mgl: Я предоставил образец сценария – San

+0

Попробуйте решение, но ваш файл cpu.xls должен быть прав. –

ответ

1

Да, безусловно. Это решение, которое вы можете реализовать. Скажите temp.tmp это файл, который содержит данные.

# cat temp.tmp 
Sno CPU USERNAME 
1 50 foo 
2 60 bar 
3 65 foobar 

t.awk имеет код AWK

# cat t.awk 
NR==1 { 
    for (i=1; i<=NF; i++) { 
     ix[$i] = i 
    } 
} 
NR>1 { 
    print $ix[c1], $ix[c2] 
} 

Теперь давайте посмотрим, работает ли он.

# awk -f t.awk c1=CPU c2=USERNAME temp.tmp 
50 foo 
60 bar 
65 foobar 

Я думаю, что это то, что вы хотите, не так ли?

+0

@Amanpreet: да! Я хотел этого. Я попытаюсь использовать то же самое в скрипте и посмотреть, работает ли он – San

+0

@Amanpreet: Я пробовал вышеупомянутые шаги ... и он работает. .Благодаря! – San

+0

отлично. Его Amarpreet: P –

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