我有一个包含多行的命令并找到详细信息
runmqsc -cert -details -pw test1 -db 123.kdb -label "Mahendra1"
输出:
label : mahendra1
issuer : cn=mahendra2, OS=abcd
subject :
----------
=mahendra3, os=hkjkj
Not Before : 10 oct 2013
not after : 20 oct 2014
现在我必须从上面的命令(mahendra2)中提取issuer值,并且必须使用下一个迭代命令。
runmqsc -cert -details -pw test1 -db 123.kdb -label "Mahendra2"
输出:
label : mahendra2
issuer : cn=mahendra3, OS=abcd
subject :CN=mahendra4, os=hkjkj
Not Before : 10 oct 2014
not after : 20 oct 2015
在一个时间点发行人和主题值将是相同的。即可以5-6次迭代。
label : mahendra5
issuer : cn=mahendra6, OS=abcd
subject :CN=mahendra6, os=hkjkj
Not Before : 10 oct 2014
not after : 20 oct 2015
有没有办法在awk中执行?
答案 0 :(得分:1)
回答这个问题:
is there any way to execute in awk ?
你很可能用awk执行此操作。我实际上有一个较旧的gawk作为awk链接。我很好奇是否可以完全用“awk”完成,所以我们就是这样。
请注意,这是完全滥用awk ,因为awk旨在解决输入文件问题。但是,如果您将所有逻辑放入BEGIN
块,那么您所要求的技术是可行的。我没有你的命令,因此我使用cat
模拟了使用label
和issuer字段命名的文件的行为。我将以下内容放入名为abuse
的文件中:
#!/usr/bin/awk -f
BEGIN {
label="mahendra1"
# j is a safety so you do not infinitely loop
while( abuseAwk( withCmdForLabel() ) && ++j < 10 ) {
# do nothing here
}
}
# There is no input file, so the body will never execute anything.
# This is *why* this script is an abuse of awk
# Putting commands here would cause awk to "hang", while waiting for input
# An END block would also "hang" for the same reason.
function abuseAwk( cmd ) {
printf( "cmd = %s\n", cmd )
while( cmd | getline ) {
FS="=" # set this here after getline has assigned $0
if( $0 ~ /^issuer/ ) { i = $2; sub( /,.*$/, "", i ); label = i }
if( $0 ~ /^subject/ ) { s = $2; sub( /,.*$/, "", s ) }
}
close( cmd )
return( i != s )
}
# you could rewrite the sprintf for your command
function withCmdForLabel() { return( sprintf( "cat %s", label ) ) }
和chmod +x abuse
使其可执行。第一个label
被硬编码以保持纯粹在awk领域。它的唯一输出是命令的形式,因为它在abuseAwk()
函数中运行。
很多更好的选择是使用bash或其他脚本语言来执行循环命令(然后可以提供一个非常简单的awk脚本),你应该永远将此代码投入生产。