【问题标题】:awk + print the field from line that defined with double quotesawk + ​​打印用双引号定义的行中的字段
【发布时间】:2014-10-26 23:28:45
【问题描述】:

如何打印用双引号定义的行中的第三个字段

例如

echo activate.bash /home/adm/run.sh "run on machine with eth2 active" "94061" | awk '{print $3}'

我预计 awk 会在双引号中打印第三个字段

 run on machine with eth2 active

但它的印刷品

 run

那么我需要在我的 ksh 语法中修正什么?

其他例子

echo 123 123 "1 2 3 4 5" | awk '{print $3}'

应该打印

1 2 3 4 5

【问题讨论】:

  • 我没有看到 awk 脚本。什么是activate.bash?什么是 run.sh?
  • 我只想打印第三个字段,看请更新quastion

标签: linux bash awk sed


【解决方案1】:

您可以像这样在 awk 中使用自定义字段分隔符:

s='activate.bash /home/adm/run.sh "run on machine with eth2 active" "94061"'
echo "$s" | awk -F '"' '{print $2}'
run on machine with eth2 active

PS:更好用:

awk -F '"' '{print $2}' <<< "$s"

Working Code Demo

【讨论】:

  • @maihabunash:检查链接的演示,您的预期输出都显示在示例中。
  • 我不想在s参数中设置行!
  • 这一行不打印任何输出 --> echo activate.bash /home/adm/run.sh "run on machine with eth2 active" "94061" | awk -F '"' '{打印 $3}'
  • 再次检查演示链接,您没有正确引用echo
【解决方案2】:

我们来看下面的例子:

 cat numbers
 123 123 "run on machine with eth2 active" "94061"


cat numbers | awk -F '"' 'BEGIN{OFS=" ";} {print $2;}'

输出:在 eth2 处于活动状态的机器上运行

【讨论】:

  • 这个答案只不过是我下面的答案的副本,有很多问题,比如cat 的无用使用和BEGIN{OFS=" ";} 的重复使用。
猜你喜欢
  • 2020-03-01
  • 2022-01-13
  • 2017-06-14
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多