2015-03-13 44 views
1

位使用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 ($1,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 

任何人都能够帮助?

回答

1

你没有看到的objectID线,因为awk中无法找到匹配

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

斜杠分隔只是正则表达式,而不是整条生产线。使用此

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

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

一个awk程序由expression {action}双列表。

  • 如果expression不存在,默认情况下它是“真”
  • 如果{action}不存在,默认情况下它{打印}
  • 如果表达式评估为“真”时,动作为执行
+0

真棒感谢格伦,我知道我在做什么错误的语法...很好的解释。 – Graham 2015-03-13 10:38:01

1

,如果你只是想objectId行出现,改变你的:

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

分成

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

然而,这将打破格式(缩进缺失)。

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

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