我想使用 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/