我在我的数据集上试过这个小脚本,出于某种原因,我没有得到所需的输出结果?有人可以看看吗?也许你可以弄明白吗?另外如果你可以提供SED命令解决方案。awk命令不能正常工作,输出错误,sed命令?
脚本
awk -v RS= -F '<connection name="|<hostPort>' '
{
sub(/".*/, "", $2)
split($3, tokens, /[:<]/)
printf "%-6s %s %s\n", $2, tokens[1], tokens[2]
}
'
输入
<hostPort>srv1:33333</hostPort>
<hostPort>srv2:33333</hostPort>
<connection name="boing_ny__Primary__" transport="tcp">
<hostPort>srv1:33333</hostPort>
<connection name="boing_ny__Backup__" transport="tcp">
<hostPort>srv2:33333</hostPort>
<connection name="boy_ny__Primary__" transport="tcp">
<hostPort>srv1:6666</hostPort>
<connection name="boy_ny__Backup__" transport="tcp">
<hostPort>srv2:6666</hostPort>
<connection name="song_ny__Primary__" transport="tcp">
<hostPort>srv1:55555</hostPort>
<connection name="song_ny__Backup__" transport="tcp">
<hostPort>srv2:55555</hostPort>
<connection name="bob_ny__Primary__" transport="tcp">
<hostPort>srv3:33333</hostPort>
<connection name="bob_ny__Backup__" transport="tcp">
<hostPort>srv4:33333</hostPort>
<hostPort>srv1:4444</hostPort>
<hostPort>srv2:4444</hostPort>
<hostPort>srv1:4444</hostPort>
电流输出
srv1:33333</hostPort>
srv2 33333
期望的输出
boing_ny__Primary__ srv1 33333
boing_ny__Backup__ srv2 33333
boy_ny__Primary__ srv1 6666
boy_ny__Backup__ srv2 6666
song_ny__Primary__ srv1 55555
song_ny__Backup__ srv2 55555
bob_ny__Primary__ srv3 33333
bob_ny__Backup__ srv4 33333
使用XML解析器不AWK/SED – anubhava
.UP给你测试/使用/投掷'AWK -v RS = ''“{$ 1 = $ 1 ;匹配($ 0,/ connection name =“([^”] +)。*(。*)/,a); gsub(/:/,“”,a [2]);} length(a [1 ]){print a [1],a [2]}' –
请用散文形容你的小脚本的目的。这将帮助读者理解代码(或其中的错误),并可能帮助您找到问题。使用各种角度来理解你自己的代码和它的不当行为。它类似于https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch