我正在编写一个bash脚本,该脚本将以1开头的所有版本号开头,其中包含10以上的subversion。它从RSS页面获取并使用awk grep和a的组合在新行上打印它们正则表达式。
curl -v --silent https://website.com.rss 2>&1 | awk -F '<title>|<\/title>' '{print $2}' | grep "^1\.[0-9][0-9]\."
上面的命令产生:
1.10.1
1.10.2
1.10.3
1.11.1
1.11.2
1.11.4
我试图让输出只显示每个子版本的最高子子版本。例如,从上面的输出我想只得到:
1.10.3
1.11.4
因为它们都是相应子版本的最新版本。
我不确定如何实现这一目标,或者甚至可能。我假设我需要一个循环来查看每个可能的另一个正则表达式,但我很难过。有什么建议吗?
答案 0 :(得分:4)
在awk中(使用@ sergio的数据):
$ awk '
BEGIN{FS=OFS="."}
$3 > a[$1 "." $2] {
a[$1 "." $2]=$3
}
END {
for(i in a)
print i,a[i]
}' file
1.10.3
1.11.4
1.12.13
1.13.4
输出顺序是awk for
默认值,即。似乎是随机的。
答案 1 :(得分:1)
您可以将命令的输出保存在文件中(例如inputfile.txt
)。例如:
1.10.1
1.11.1
1.11.2
1.10.3
1.13.2
1.12.3
1.11.4
1.12.3
1.12.1
1.12.13
1.10.2
1.13.1
1.13.4
然后使用以下脚本:
#!/usr/bin/env bash
max=0
i=0
lines=($(sort -t. -n -k1,1 -k2,2 -k3,3 inputfile.txt))
version=${lines[0]/??/}
version=${version/.*/}
for line in ${lines[@]}; do
tmp=${line/??/}
tmp=${tmp/.*/}
if [ $tmp -eq $version ]; then
if (( ${line//./} > $max )); then
max=${line//./}
fi
else
echo ${lines[i-1]}
fi
version=$tmp
((i++))
done
echo $line
这将输出每个子版本的最高子子版本:
1.10.3
1.11.4
1.12.13
1.13.4
我假设每行以一个数字后跟一个点开头。如果不是这种情况(例如11.10.1
),则需要修改行tmp=${line/??/}
。
答案 2 :(得分:1)
你不需要用管道输送到另一个awk的管道 - 只需1个awk命令即可:
awk -F '</?title>' '
{
split($2,f,/[.]/)
ver = f[1]
subVer = f[2]
subSubVer = f[3]
}
(ver == 1) && (subVer >= 10) {
key = ver "." subVer
maxSsv[key] = (subSubVer > maxSsv[key] ? subSubVer : maxSsv[key])
}
END {
for (key in maxSsv) {
print key "." maxSsv[key]
}
}
'
答案 3 :(得分:-1)
如果您想使用正则表达式,那么:
function arrayManipulation(n, queries) {
var array = new Array(n).fill(0)
var x = 0
var recurring = (argmnt, query) => {
//problem start here
var start = query[0],
end = query[1]
//problem end somewhere else
var newArg = argmnt.map((el, index) => {
if (index + 1 >= start && index + 1 <= end) {
return query[2] + el
} else {
return el
}
})
console.log(newArg)
x += 1
if (x < queries.length) {
recurring(newArg, queries[x], x)
} else {
return newArg
}
}
var solution = recurring(array, queries[x])
}
arrayManipulation(5, [
[1, 2, 100],
[2, 5, 100],
[3, 4, 100]
])
其中inputfile.txt包含版本号的行。