【问题标题】:Awk last field string substitutionawk 最后一个字段字符串替换
【发布时间】:2015-11-09 06:28:58
【问题描述】:

我正在尝试使用 awk 的以下输出的字符串替换来获取最后一个文件 -

ps -ef |grep -i "[o]cssd.bin"

输出:

grid     47275     1  1 Sep23 ?        17:49:39 /opt/grid/12.1/bin/ocssd.bin

使用 awk 作为 -

$ ps -ef | grep -i "[o]cssd.bin" | awk '{ gsub("/ocssd.bin",""); print $NF}'

输出:

$NF}
/opt/grid/12.1/bin

如何避免 "$NF}" ?我只需要“/opt/grid/12.1/bin”..!

【问题讨论】:

  • 该脚本不会输出字符串NF}。如果你得到那个输出,那么你的脚本的其他部分有问题,你还没有向我们展示。另外,为什么要在 grep 中进行不区分大小写的搜索,然后在 awk sub() 中假设小写,以及将 o 放在 grep 中的方括号内有什么意义?
  • @EdMorton 我不知道您的其他问题的答案,但括号中的 o 的原因是防止 grep 本身作为匹配项出现,人们也可以通过管道输入grep -v grep跨度>
  • @123 谢谢,我以前从未见过这种方法(或者没有注意到)。

标签: awk gsub


【解决方案1】:

尝试:

ps -ef | grep -i "[o]cssd.bin" | awk '{ if(gsub("/ocssd.bin","")) print $NF}'

【讨论】:

  • 既然加了if(gsub("/ocssd.bin","")),现在grep -i "[o]cssd.bin"是不是多余了?
  • awk 'BEGIN{IGNORECASE=1}/[o]cssd.bin/{if(gsub("/ocssd.bin/",""))print $NF}' #忽略大小写跨度>
  • if 条件只有在 gsub 进行替换时才为真(否则你为什么会有if 条件呢?)。如果是这样,那么条件/[o]cssd.bin/不是多余的吗?
  • 其中的问题和脚本毫无意义。 OP 使用不一致和奇怪的语言结构,并要求我们帮助他解决一个不可能发生的问题。鉴于此 - 任何事情都可能是正确(或错误)的答案:-)。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多