AWK脚本输出不正确-列中重复
我试图提取多个脚本文件的描述,并在描述中包含脚本的文件名。我的问题是,该命令在第一列中生成多个重复的文件名。你能告诉我如何删除这些复制品吗 我也会从stackoverflow复制这段代码并修改它,但我不是100%理解它。如果您能解释一下AWK脚本输出不正确-列中重复,awk,Awk,我试图提取多个脚本文件的描述,并在描述中包含脚本的文件名。我的问题是,该命令在第一列中生成多个重复的文件名。你能告诉我如何删除这些复制品吗 我也会从stackoverflow复制这段代码并修改它,但我不是100%理解它。如果您能解释一下gsub的功能以及$0、e=1和e==1的功能,我将不胜感激 我的代码 输入 local stdnse=需要“stdnse” 本地短端口=需要“短端口” 本地tn3270=需要“tn3270” 本地暴力=需要“暴力” 本地信誉=需要“信誉” 本地unpwdb=需要
gsub
的功能以及$0
、e=1
和e==1
的功能,我将不胜感激
我的代码
输入
local stdnse=需要“stdnse”
本地短端口=需要“短端口”
本地tn3270=需要“tn3270”
本地暴力=需要“暴力”
本地信誉=需要“信誉”
本地unpwdb=需要“unpwdb”
本地nmap=需要“nmap”
本地字符串=需要“字符串”
说明=[[
IBM大型机(z/OS)的TSO用户ID枚举器。TSO登录面板
告诉您用户ID何时有效或何时无效,并显示以下消息:
IKJ56420I用户ID未被授权使用TSO
。
TSO登录过程可以通过两种方式工作:
1) 系统会提示您输入用户ID-
IKJ56700A
您使用要使用的用户对其进行回复。
如果用户ID有效,它将为您提供一个正常的
TSO登录屏幕。否则它将为您提供
上面的屏幕登录错误。
2) 您将获得TSO登录面板并输入您的用户ID
在Userid==>
提示符处。如果
如果您收到上述错误消息,则表明用户ID无效。
此脚本依赖于NSE TN3270库,该库模拟
用于NMAP的TN3270屏幕。
TSO用户ID具有以下规则:
-它不能以数字开头
-仅包含字母数字字符和@、#、$。
-它不能超过7个字符
]]
---
--@args tso-enum.commands需要分号分隔列表中的命令
--访问TSO。默认设置为tso
。
--
--@用法
--nmap--script=tso枚举-p 23
--
--@用法
--nmap-sV-p 9923 10.32.70.10--script tso enum--script args userdb=tso_users.txt,tso enum.commands=“logon applid(tso)”
实际产量
tso-enum.nse=[[
tso-enum.nse IBM大型机(z/OS)的tso用户ID枚举器。tso登录面板
tso-enum.nse会在用户ID有效或无效时通知您,并显示以下消息:
tso-enum.nseIKJ56420I用户ID未被授权使用tso
。
tso-enum.nse
tso-enum.nse tso登录过程可以通过两种方式工作:
tso-enum.nse 1)系统会提示您输入用户ID-
IKJ56700A
tso-enum.nse,您可以使用要使用的用户对其进行回复。
tso-enum.nse如果用户ID有效,它将为您提供正常的
tso-enum.nse tso登录屏幕。否则它将为您提供
上述tso-enum.nse屏幕登录错误。
tso-enum.nse 2)您将获得tso登录面板并输入您的用户ID
在Userid==>
提示符处显示tso-enum.nse
tso-enum.nse如果您收到上面的错误消息,则该用户ID无效。
tso-enum.nse
tso-enum.nse此脚本依赖于nse TN3270库,该库模拟
NMAP的tso-enum.nse TN3270屏幕。
tso-enum.nse
tso-enum.nse tso用户ID具有以下规则:
tso-enum.nse-它不能以数字开头
tso-enum.nse-仅包含字母数字字符和@、#、$。
tso-enum.nse-长度不能超过7个字符
期望输出
tso-enum.nse
说明=[[
IBM大型机(z/OS)的TSO用户ID枚举器。TSO登录面板
告诉您用户ID何时有效或何时无效,并显示以下消息:
IKJ56420I用户ID未被授权使用TSO
。
TSO登录过程可以通过两种方式工作:
1) 系统会提示您输入用户ID-
IKJ56700A
您使用要使用的用户对其进行回复。
如果用户ID有效,它将为您提供一个正常的
TSO登录屏幕。否则它将为您提供
上面的屏幕登录错误。
2) 您将获得TSO登录面板并输入您的用户ID
在Userid==>
提示符处。如果
如果您收到上述错误消息,则表明用户ID无效。
此脚本依赖于NSE TN3270库,该库模拟
用于NMAP的TN3270屏幕。
TSO用户ID具有以下规则:
-它不能以数字开头
-仅包含字母数字字符和@、#、$。
-它不能超过7个字符
]]
理解
在这些块中,作者通过切换标志(e
)来定义范围 / 超出上述范围:
# end of range
/\]\]/ {
e = 0
}
# start of range
/description = \[\[/ {
gsub("^.*description ", "", $0)
e = 1
}
字符串函数gsub
用在第三个参数中找到的第二个参数替换第一个参数的任何出现。在这种情况下,regex“^.*description”
匹配当前记录$0
的开头(在这种情况下,记录是一行),直到字符串说明
,并将其替换为空字符串,从而将其删除,保留实际说明的行
下面的最后一个块仅打印该行和FILENAME
(如果它在描述范围内):
{
if (e == 1) {
print FILENAME, $0
}
}
修改 所需的修改是在范围开始处打印
文件名
,在范围内缩进行,并对块重新排序:
# end range
/\]\]/ {
e = 0
}
# in range
e == 1 {
printf "\t%s\n", $0
}
# start range
/description = \[\[/ {
print FILENAME
e = 1
}
我删除了无用的(至少对于示例数据)gsub()
调用
调用:
$ awk -f script.awk data.txt
输出:
$ awk -f script.awk data.txt
data.txt
IBM大型机(z/OS)的TSO用户ID枚举器。TSO登录面板
告诉您用户ID何时有效或何时无效,并显示以下消息:
IKJ56420I用户ID未被授权使用TSO
。
TSO登录过程可以通过两种方式工作:
1) 系统会提示您输入用户ID-
IKJ56700A
您使用要使用的用户对其进行回复。
如果用户ID有效,它将为您提供一个正常的
TSO登录屏幕。否则它将为您提供
屏幕标志