繁体   English   中英

使用awk从特定行获取第n个字段

[英]Using awk to get nth field from a particular line

我写了一个bash脚本,应该获取ghostscript的版本号。 代码如下:

local str=$(gs -v)
local gs_version=''
if [ -n "$str" ] ; then
  gs_version=`awk -F'|' 'Ghostscript/ {version=$3; print version}' $str`
fi
echo " version: $gs_version"

gs -v的结果是:

GPL Ghostscript 8.70 (2009-07-31)
Copyright (C) 2009 Artifex Software, Inc.  All rights reserved.

该脚本正在寻找单词Ghostscript并试图提取第三个单词8.70。 那是我的目标。

我不是awk专家,但是运行此代码时出现以下错误:

awk: Ghostscript/ {version=$3; print version}
awk:              ^ syntax error

我想我一定要瞎了,因为我看不出有什么问题。 我以为我可以在Ubuntu上工作,但是当我在CentOS 6上尝试时,这就是我得到的。

你可以说:

awk '/Ghostscript/{print $3}' inputfile

从包含Ghostscript的行中获取第三个字段。

当你说:

gs_version=`awk -F'|' 'Ghostscript/ {version=$3; print version}' $str`

有:

  • 失踪/在Ghostscript之前
  • 此外,由于您希望awk从字符串读取,因此需要使用herestring。
  • 字段默认情况下由空格分隔,因此您不需要提供一个(不确定为什么使用|
gs_version=$(awk '/Ghostscript/ {version=$3; print version}' <<< "$str")

尽管有更简单的方法来获取版本信息。

或者,您可以使用grep -P来获取该版本字符串:

gs -v | grep -oP '(?<=Ghostscript )\S+'
8.70

暂无
暂无

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

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