Unix 如何使用awk命令打印列的值?

Unix 如何使用awk命令打印列的值?,unix,awk,Unix,Awk,我正在尝试编写一个脚本,将CPU利用率和内存利用率结果打印到csv文件中。但我只想打印名为“CPU”、“用户名”和“内存”的特定列中的值 您能告诉我如何使用awk脚本实现同样的功能吗?使用awk,我发现awk“{print$2,$5}”打印第2列和第5列的值。但是我想通过提供列名而不是列号来打印这些值 有可能吗 我编写的示例脚本是: #!/bin/sh #This is a comment #This is my first shell script echo "System Status Re

我正在尝试编写一个脚本,将CPU利用率和内存利用率结果打印到csv文件中。但我只想打印名为“CPU”、“用户名”和“内存”的特定列中的值

您能告诉我如何使用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%

是的,当然。这是您可以实现的解决方案。 假设
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]
} 

我想这就是你想要的,不是吗?

你能为你的脚本提供示例输入吗?@hek2mgl:我已经提供了示例脚本尝试解决方案,但是你的cpu.xls文件应该是正确的。@San我不知道
prstat
。你能提供程序的样本输出吗?@hek2mgl-更新了样本output@Amanpreet:是的!我想要这个..我会尝试在脚本中使用相同的,看看是否works@Amanpreet:我尝试了上面提到的步骤。它正在工作。谢谢!:很抱歉,您的名字搞错了。但是现在出现了一个新问题。如果您能看到示例输出,您提供的脚本在前三条记录中运行良好。对于下一组记录,仅发布用户名
0.2%root 0.1%root 0.0%oracle username root oracle
# awk -f t.awk c1=CPU c2=USERNAME temp.tmp
50 foo
60 bar
65 foobar