使用 awk 格式化

Formatting with awk

awk 的初学者,希望有人能指出我哪里出错了..

我正在尝试 运行 在脚本中执行 awk 并更改匹配 "objectID"

的特定字符串的格式

这是源数据:

name=SDC1NM519
  capacityInKB=1,341,231,104
  osType=Windows
      objectID=LU.R700.53280.24580
      displayName=00:60:04
      capacityInKB=1,048,576
      consumedCapacityInKB=43,008
      dpPoolID=10
      objectID=LU.R700.53280.24584
      displayName=00:60:08
      capacityInKB=1,335,885,824
      consumedCapacityInKB=375,588,864
      dpPoolID=10

这是我的 awk:

awk '/name/
/osType/
/objectID=LU {print "objectID=" substr (,18,5) }/ 
/displayName/
/capacityInKB/
/consumedCapacityInKB/
/dpPoolID/' rawdata.txt >> objtxt

我希望看到如下所示,对象 ID 已更改为仅显示“53280”。是的,数字始终采用相同的格式,但数字不同:

name=SDC1NM519
  capacityInKB=1,341,231,104
  osType=Windows
      objectID=53280
      displayName=00:60:04
      capacityInKB=1,048,576
      consumedCapacityInKB=43,008
      dpPoolID=10

我得到的是这个...根本没有对象...??

name=SDC1NM519
  capacityInKB=1,341,231,104
  osType=Windows
      displayName=00:60:04
      capacityInKB=1,048,576
      consumedCapacityInKB=43,008
      dpPoolID=10

有人能帮忙吗??

您没有看到 objectID 行,因为 awk 找不到匹配项

/objectID=LU {print "objectID=" substr (,18,5) }/

斜线分隔 只是正则表达式 ,而不是整行。使用这个

/objectID=LU/ {print "objectID=" substr (,18,5) }

/objectID=LU/ {split([=12=], a, "."); print "objectID=" a[3]}

一个 awk 程序由 expression {action} 对列表组成。

  • 如果 expression 不存在,默认为 "true"
  • 如果 {action} 不存在,默认为 {print}
  • 如果表达式的计算结果为 "true",则执行操作

如果您只想显示 objectId 行,请更改您的:

/objectID=LU {print "objectID=" substr (,18,5) }/

进入

/objectID=LU/ {print "objectID=" substr (,18,5) }

但是这会破坏格式(缺少缩进)。

要保持​​缩进,你可以这样做:

/objectID=LU/&&sub(/=.*/,"="substr(,18,5))