这是代码
for f in tmp_20100923*.xml
do
str1=`more "$f"|grep count=`
i=`echo $str1 | awk -F "." '{print($2)}'`
j=`echo $i | awk -F " " '{print($2)}'` // output is `count="0"`
sed 's/count=//g' $j > $k; echo $k;
done
我尝试使用sed过滤器从上面的输出中获取值0但没有成功。你能否告诉我如何将0与字符串count="0"
分开?
答案 0 :(得分:1)
从$j
删除所有非数字:
echo ${j//[^0-9]/}
答案 1 :(得分:1)
你可以让AWK做任何事情:
for f in tmp_20100923*.xml
do
k=$(awk -F '.' '/count=/ {split($2,a," "); print gensub("count=","","",a[2])}')
done
修改强>
根据您的评论,您不需要拆分小数。你也可以让AWK做总结。所以你不需要shell循环。
awk '/count=/ { sub("count=","",$2); gsub("\042","",$2); sum += $2} END{print sum}' tmp_20100923*.xml
答案 2 :(得分:0)
您正在尝试查找名为$ j的文件
相反,你可以
echo $j | sed 's/count=//g'
答案 3 :(得分:0)
这应该阻止引号之间的所有内容。
sed -re 's/count="([^"]+)"/\1/g'
-r
添加--regexp-extended
以便能够使用正则表达式来填充内容,而我给你的表达式意味着:
search for count=",
then store ( any character that's not a " ), then
make sure it's followed by a ", then
replace everything with the stuff in the parenthesis (\1 is the first register)
答案 4 :(得分:0)
您可以使用此sed regexp:
sed 's/count="\(.*\)"/\1/'
但是你的脚本有另一个问题:
j=`echo $i | awk -F " " '{print($2)}'` // output is `count="0"` sed 's/count=//g' $j > $k; echo $k;
应该是
j=`echo $i | awk -F " " '{print($2)}'` // output is `count="0"` echo $j | sed 's/count=//g'
或更好:
echo $i | awk -F " " '{print($2)}' | sed 's/count=//g'
'sed'接受文件名作为输入。 $ j是一个shell变量,你可以放置另一个程序的输出(awk)。
此外,“>”重定向将事物放入文件中。你写了“> $ k”然后“echo $ k”,好像> $ k在$ k变量中写了sed的输出。
如果你想将sed的输出保存在$ k变量中,请改为:
j=`echo $i | awk -F " " '{print($2)}'` // output is `count="0"` k=`echo $j | sed 's/count=//g'`