AIX/KSH 从逗号分隔的行中提取字符串
AIX/KSH Extract string from a comma seperated line
我想从以下逗号分隔行中提取部分 "virtual_eth_adapters":
lpar_io_pool_ids=none,max_virtual_slots=300,"virtual_serial_adapters=0/server/1/any//any/1,1/server/1/any//any/1","virtual_scsi_adapters=166/client/1/ibm/166/0,266/client/2/ibm/266/0",virtual_eth_adapters=116/0/263,proc_mode=shared,min_proc_units=0.5,desired_proc_units=2.0,max_proc_units=8.0
我正在使用带有 ksh 的 AIX。
我找到了使用 awk 和 -F 标志的变通方法,用定界符分隔字符串,然后打印项目 ID。但是,如果输入字符串发生变化,id 可能会有所不同...
第一个解决方案: 如果您想在输出中也打印字符串 virtual_eth_adapters
,请尝试以下操作。
awk '
match([=10=],/virtual_eth_adapters[^,]*/){
print substr([=10=],RSTART,RLENGTH)
}
' Input_file
输出如下。
virtual_eth_adapters=116/0/263
第二个解决方案: 如果您只想打印字符串 virtual_eth_adapters
的值,请尝试以下操作。
awk '
match([=12=],/virtual_eth_adapters[^,]*/){
print substr([=12=],RSTART+21,RLENGTH-21)
}
' Input_file
输出如下。
116/0/263
说明: 添加代码说明。
awk ' ##Starting awk program here.
match([=14=],/virtual_eth_adapters[^,]*/){ ##Using match function of awk here, to match from string virtual_eth_adapters till first occurrence of comma(,)
print substr([=14=],RSTART,RLENGTH) ##Printing sub-string whose starting value is RSTART and till value of RLENGTH, where RSTART and RLENGTH variables will set once a regex found by above line.
}
' Input_file ##Mentioning Input_file name here.
我确实使用这些方法在行中间获取数据。
awk -F'virtual_eth_adapters=' 'NF>1{split(,a,",");print a[1]}' file
116/0/263
它简短易学。 (无需计数或正则表达式)
-F'virtual_eth_adapters='
将行拆分为 virtual_eth_adapters=
NF>1
如果有多个字段(行包含virtual_eth_adapters=
)
split(,a,",")
将行的最后一部分拆分为数组 a
,由 ,
分隔
print a[1]
打印数组的第一部分 a
还有一个解决方案(假设字符串的位置)
awk -F\, '{print }'
如果您只需要值,试试这个:
awk -F\, '{print }'|awk -F\= '{print }'
也可以这样取值:
awk -F\, '{split(,a,"=");print a[2]}'
我想从以下逗号分隔行中提取部分 "virtual_eth_adapters":
lpar_io_pool_ids=none,max_virtual_slots=300,"virtual_serial_adapters=0/server/1/any//any/1,1/server/1/any//any/1","virtual_scsi_adapters=166/client/1/ibm/166/0,266/client/2/ibm/266/0",virtual_eth_adapters=116/0/263,proc_mode=shared,min_proc_units=0.5,desired_proc_units=2.0,max_proc_units=8.0
我正在使用带有 ksh 的 AIX。
我找到了使用 awk 和 -F 标志的变通方法,用定界符分隔字符串,然后打印项目 ID。但是,如果输入字符串发生变化,id 可能会有所不同...
第一个解决方案: 如果您想在输出中也打印字符串 virtual_eth_adapters
,请尝试以下操作。
awk '
match([=10=],/virtual_eth_adapters[^,]*/){
print substr([=10=],RSTART,RLENGTH)
}
' Input_file
输出如下。
virtual_eth_adapters=116/0/263
第二个解决方案: 如果您只想打印字符串 virtual_eth_adapters
的值,请尝试以下操作。
awk '
match([=12=],/virtual_eth_adapters[^,]*/){
print substr([=12=],RSTART+21,RLENGTH-21)
}
' Input_file
输出如下。
116/0/263
说明: 添加代码说明。
awk ' ##Starting awk program here.
match([=14=],/virtual_eth_adapters[^,]*/){ ##Using match function of awk here, to match from string virtual_eth_adapters till first occurrence of comma(,)
print substr([=14=],RSTART,RLENGTH) ##Printing sub-string whose starting value is RSTART and till value of RLENGTH, where RSTART and RLENGTH variables will set once a regex found by above line.
}
' Input_file ##Mentioning Input_file name here.
我确实使用这些方法在行中间获取数据。
awk -F'virtual_eth_adapters=' 'NF>1{split(,a,",");print a[1]}' file
116/0/263
它简短易学。 (无需计数或正则表达式)
-F'virtual_eth_adapters='
将行拆分为virtual_eth_adapters=
NF>1
如果有多个字段(行包含virtual_eth_adapters=
)split(,a,",")
将行的最后一部分拆分为数组a
,由,
分隔
print a[1]
打印数组的第一部分a
还有一个解决方案(假设字符串的位置)
awk -F\, '{print }'
如果您只需要值,试试这个:
awk -F\, '{print }'|awk -F\= '{print }'
也可以这样取值:
awk -F\, '{split(,a,"=");print a[2]}'