繁体   English   中英

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

[英]How to print the value of a column using awk command?

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

您能告诉我如何使用awk脚本实现相同的效果吗?使用awk,我发现awk'{print $ 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]
} 

现在让我们看看它是否有效。

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

我想这就是你想要的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM