【发布时间】:2020-11-25 22:44:40
【问题描述】:
由于我是awk 的新手,请帮助我提出您的建议。我尝试了以下命令来过滤最大值并分别忽略示例文本文件中的第一行和最后一行。当我单独尝试它们时它们会起作用。
我的查询:
我需要忽略文件的最后一行和前几行,然后需要使用 awk 为字段 7 取最大值。
我还需要忽略带有字符的行。谁能建议我两个同时使用这两个命令并获得所需输出的可能性。
示例文件:
Linux 3.10.0-957.5.1.el7.x86_64 (j051s784) 11/24/2020 _x86_64_ (8 CPU)
12:00:02 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:10:01 AM 4430568 61359128 93.27 1271144 27094976 66771548 33.04 39005492 16343196 1348
12:20:01 AM 4423380 61366316 93.28 1271416 27102292 66769396 33.04 39012312 16344668 1152
12:30:04 AM 4406324 61383372 93.30 1271700 27108332 66821724 33.06 39028320 16343668 2084
12:40:01 AM 4404100 61385596 93.31 1271940 27107724 66799412 33.05 39031244 16344532 1044
06:30:04 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
07:20:01 PM 3754904 62034792 94.29 1306112 27555948 66658632 32.98 39532204 16476848 2156
Average: 4013043 61776653 93.90 1293268 27368986 66755606 33.03 39329729 16427160 2005
使用的命令:
cat testfile | awk '{print $7}' | head -n -1 | tail -n+7
awk 'BEGIN{a= 0}{if ($7>0+a) a=$7} END{print a}' testfile
预期输出:
Maximum value for the column 7 by excluding the lines wherever alphabet character is available
【问题讨论】:
-
tail -n+7跳过前 6 行。这是故意的吗? -
在这里我尝试了 -n+7 以避免包含字母字符和空行的行。@RuudHelderman
-
如果我将你的命令的点点滴滴汇集在一起,我似乎得到了你的要求:
head -n-1 testfile | tail -n+7 | awk 'BEGIN{a=0}{if($7>0+a)a=$7}END{print a}'输出:27555948
标签: awk