有点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 '/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
任何人都可以提供帮助吗?
答案 0 :(得分: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
不存在,默认情况下为“true”{action}
不存在,默认为{print} 答案 1 :(得分: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))