linux - 使用 AWK 仅提取 Linux 内核版本列

标签 linux awk

我想使用 AWK 从 Debian/Ubuntu grub 配置文件/boot/grub/grub.cfg 中仅提取 Linux 内核版本列。

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

我的命令:

# 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)

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

最佳答案

根据您显示的尝试,您可以尝试以下操作吗?由于后期未提供实际样本,因此尚未对此进行测试。

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.

关于linux - 使用 AWK 仅提取 Linux 内核版本列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67412729/

相关文章:

python - 这可能是 Anaconda 2.5.0 环境中 scipy.sparse.linalg.eigs 函数中的错误吗?

awk - 将 awk 命令存储在 bash 脚本的变量中

awk - awk 中的两个文件处理

linux - 部署到 Linux 应用服务时,Angular CLI 应用程序未运行

linux - Oracle Forms Builder Ubuntu 安装问题

c - 如何传输以太网帧?

linux - 在 linux 中获取 % 之前的数字的命令

awk 将变量设置为 if 语句匹配后的行

regex - 使用 grep 查找动态文本

regex - 如何匹配单行字符串上最后一次出现的模式