首页 > 解决方案 > 使用 AWK 仅提取 Linux Kernel Versions 列

问题描述

从 Debian/Ubuntu grub 配置文件 /boot/grub/grub.cfg,我想只提取 Linux Kernel Version 列,使用 AWK。

我使用管道编写了一个非常长的命令。我们可以把它缩短吗?

我的命令:

# awk -F"--class" '/menuentry/ && /with Linux/ {print $1}' /boot/grub/grub.cfg | awk '{print i++ " : " $5,$6,$7,$8}' | sed -e "s/'/ /g"
0 : Linux 5.12.1
1 : Linux 5.12.1 (recovery mode)
2 : Linux 4.19.0-14-amd64
3 : Linux 4.19.0-14-amd64 (recovery mode)

上面的输出是我想要的输出,但我想知道命令是否可以更短以产生相同的输出?

标签: linuxawk

解决方案


根据您显示的尝试,请您尝试以下操作。这没有经过测试,因为实际样品没有在帖子中给出。

awk -F"--class" '
/menuentry/ && /with Linux/{
  gsub(/\047/,"",$1)
  split($1,arr," ")
  print i++" : "arr[5],arr[6],arr[7],arr[8]
}
' Input_file

说明:为上述添加详细说明。

awk -F"--class" '              ##Starting awk program from here, setting field separator as --class for all lines.
/menuentry/ && /with Linux/{   ##Searching menuentry AND with Linux keywords in line.
  gsub(/\047/,"",$1)           ##Globally substituting ' with NULL in 1st field.
  split($1,arr," ")            ##Splitting 1st field into array arr here.
  print i++" : "arr[5],arr[6],arr[7],arr[8]  ##Printing i value(increment with 1 here) then printing values of array 5th, 6th, 7th and 8th elements here.
}
' Input_file                   ##Mentioning Input_file name here.

推荐阅读