使用 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))
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))